Система команд процессоров IA-32. Функциональная классификация машинных команд. Понятие о формате машинных команд, страница 6

Префиксы

Код операции

Mod R/M

SIB

Смещение

Непосредственный операнд

Байт Mod R/M

2 бита                           3 бита                            3 бита

Способ адресации

Регистр/Код опреации

Регистр/Память

Байт SIB

2 бита      3 бита                3 бита

Масштаб

Индекс

База

Рис. 3.1. Формат каманды IA=32

3.2.1. Поле префиксов

Префиксы – необязательные однобайтовые элементы машинной команды. Машинная команда может иметь до четырех префиксов одновременно. В памяти префиксы предшедствуют всем другим полям. Порядок же их следования может быть любым.

·  Префикс блокировки шины (значение 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-битный или наоборот.

3.2.2. Поле кода операции

Код операции – обязательный элемент, который описывает операцию выполняемую командой. Код операции может занимать от одного до трех байт. Для некоторых команд часть кода операции может находиться в байте режима адресации mod r/m. Двух-байтовый формат кода операций для команд общего назнечения и SIMD команд состоит из:

·  Управляющего первого байта (0FH) и второго байта кода операции

·  Обязательного префикса (66FH, F2H, F3H), управляющего байта и второго байта кода операции

3.2.3. Байт режима адресации

Байт режима адресации (mod r/m) – несет в себе информацию об операндах и режиме адресации.

·  Поле mod в комбинации с полем r/m дает 32 возможных значения: 8 регистров и 24 способа адресации.

·  Поле reg/opcode определяет 8 регистров или три дополнительных бита кода операции. Назначение поля reg/opcode – уточнять основной код операции.

·  Поле r/m определяет регистровый операнд или в комбинации с полем mod кодирует способ адресации. Иногда, определенные комбинации поля mod и поля r/m используются для представления информационного кода некоторых команд.

3.2.4. Байт масштаба, индекса и базы

Байт масштаба, индекса и базы (sib – scale-index-base) используется для расширения возможностей адресации операндов.

·  Поле scale определяет масштабный фактор.

·  Поле index определяет номер регистра, как индексного регистра.

·  Поле base определяет номер регистра, как базового регистра.

3.2.5. Поле смещения и непосредственного операнда

Поле смещения в команде – это 8-, 16-, или 32-разрядное число со знаком, представляющее собой полностью или частично значение эффективного адреса операнда.

Поле непосредственного операнда – необязательное поле, представляющее собой 8-, 16- или 32-разрядный операнд, помещенный прямо в команду.