Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Режимы адресации

Сообщений 1 страница 3 из 3

1

http://www.club155.ru/x86cmdformats-modrm

Для того, чтобы написать хорошую документацию, надо выполнять действия.
Например
1) читать существующую документацию, отмечать, что в ней нехорошо.
2) пробовать писать документацию по-своему, и оценивать, стало ли лучше.

Пока понимание плохое, и документация плохая. Не всё сразу.

Пробовать можно публично и скрытно.

Некоторые бахвалятся тем, что сделали рекурсивный спуск, но не показывают код. Это, в принципе нормально.
Вообще может они всё сделают скрытно, а нам ничего не достанется. Поэтому надеяться на их код нельзя.
Может они планируют зарегистрировать их код в госорганах и получать за него деньги. Имеют право.

0

2

https://osdev.fandom.com/ru/wiki/Кодирование_команд

Префикс изменения размера адреса 67h, использованный в 64-разрядном режиме, заставляет процессор вычислить 32-разрядный эффективный адрес.
Перед использованием адрес будет расширен до нужной разрядности (64 бита) путём добавления к нему лидирующих нулей.

Хм, а это как? Добавил префикс и оно обрезало верхние 32 бита адреса?

для вычисления адреса могут использоваться или 32-, или 64-разрядные регистры: при отсутствии префикса 67h для вычисления адреса используются 64-разрядные регистры (RAX, RCX и т.д.), а при наличии этого префикса — 32-разрядные

при Mod=00 и R/M=101 используется не прямая адресация (когда эффективным адресом операнда является 32-разрядное смещение), а адресация относительно указателя инструкции: disp32 (RIP). Регистр RIP содержит адрес следующей инструкции, а отклонение рассматривается как 32-разрядное число со знаком и расширяется до 64 бит, что позволяет обратиться к любой ячейке памяти в пределах 2 Гбайт до или после текущего значения RIP;

адресация относительно регистров RSP/ESP и R12/R12D возможна только с помощью байта SIB;

А чем они какие-то особенные?

поле отклонения, если присутствует, имеет длину 8 или 32 бита и рассматривается как число со знаком. Перед его сложением с содержимым заданного в поле R/M регистра или со значением, полученным при обработке байта SIB, оно расширяется до 64 бит;

Какой максимальной длинны можно сделать команду LEA?
REX.W - байт, байт кода команды, байт ModR/M, байт SIB, 8 байт адреса, 4 байта отклонения?
это 16 байтов. А максимальная длина инструкции - 15 байтов. Что-то не сходится.

если операнд имеет размер 64 бита (присутствует префикс REX с установленным битом W), то во всех инструкциях, кроме MOV reg64, const (коды операции B8h–BFh), используется 32-разрядное поле непосредственного операнда, причём сам непосредственный операнд рассматривается как число со знаком и перед выполнением операции расширяется до 64 бит;
в инструкциях MOV reg64, const (коды операции B8h–BFh c префиксом REX, имеющим единичный бит W) используется 64-разрядное поле непосредственного операнда.

А к команде LEA это относится, или только к MOV ?

Отредактировано Лис (2024-08-22 19:23:01)

0

3

https://hype.retroscene.org/blog/1077.html

«то как эти коды пояснялись в руководствах от самого Intel было несистематизировано и поэтому не воспринималось.»

0