Префиксы |
Код операции |
Mod R/M |
SIB |
Смещение |
Непосредственный операнд |
Байт Mod R/M
2 бита 3 бита 3 бита
Способ адресации |
Регистр/Код опреации |
Регистр/Память |
Байт SIB
2 бита 3 бита 3 бита
Масштаб |
Индекс |
База |
Рис. 3.1. Формат каманды IA=32
Префиксы – необязательные однобайтовые элементы машинной команды. Машинная команда может иметь до четырех префиксов одновременно. В памяти префиксы предшедствуют всем другим полям. Порядок же их следования может быть любым.
· Префикс блокировки шины (значение 0F0h) – инициирует выдачу процессоров сигнала LOCK# для блокировки системной шины.
· Префикс повторения – используется с цепочечными командами. Поддерживаются следующие префиксы: 0F2h (REPNE/REPNZ) и 0F3h (REP/REPE/REPZ).
· Префикс замены сегмента – в явной форме указывает, какой сегментный регистр в данной команде адресует команды, стек или данные:
2Eh – адресация через CS; 36h – адресация через SS;
3Eh – адресация через DS; 26h – адресация через ES;
64h – адресация через FS; 65h – адресация через GS.
· Префикс предпочтений ветвления – позволяет программе указать процессору на наиболее предпочтительное направление ветвления. Используется только с командами условного перехода (Jcc). 2Eh – ветвление не производить; 3Eh – ветвление производить.
· Префикс размера операнда (значение 66h) – изменяет разрядность операнда, установленного в программе; с 16-битного на 32-битный или наоборот.
· Префикс размера адреса (значение 67h) – изменяет разрядность адреса, установленного в программе; с 16-битного на 32-битный или наоборот.
Код операции – обязательный элемент, который описывает операцию выполняемую командой. Код операции может занимать от одного до трех байт. Для некоторых команд часть кода операции может находиться в байте режима адресации mod r/m. Двух-байтовый формат кода операций для команд общего назнечения и SIMD команд состоит из:
· Управляющего первого байта (0FH) и второго байта кода операции
· Обязательного префикса (66FH, F2H, F3H), управляющего байта и второго байта кода операции
Байт режима адресации (mod r/m) – несет в себе информацию об операндах и режиме адресации.
· Поле mod в комбинации с полем r/m дает 32 возможных значения: 8 регистров и 24 способа адресации.
· Поле reg/opcode определяет 8 регистров или три дополнительных бита кода операции. Назначение поля reg/opcode – уточнять основной код операции.
· Поле r/m определяет регистровый операнд или в комбинации с полем mod кодирует способ адресации. Иногда, определенные комбинации поля mod и поля r/m используются для представления информационного кода некоторых команд.
Байт масштаба, индекса и базы (sib – scale-index-base) используется для расширения возможностей адресации операндов.
· Поле scale определяет масштабный фактор.
· Поле index определяет номер регистра, как индексного регистра.
· Поле base определяет номер регистра, как базового регистра.
Поле смещения в команде – это 8-, 16-, или 32-разрядное число со знаком, представляющее собой полностью или частично значение эффективного адреса операнда.
Поле непосредственного операнда – необязательное поле, представляющее собой 8-, 16- или 32-разрядный операнд, помещенный прямо в команду.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.