ФОРМАТ КОМАНД

Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение некоторой операции. Правила кодирования команд называются форматом команд.

 

0, 1, 2, 3 или 4 байта 1, 2 или 3 байта 0 или 1 байта 0 или 1 байт 0, 1, 2 или 4 байта 0, 1, 2 или 4 байт
Префиксы Код операции Байт mod r/m Байт sib Смещение в команде Непосредственный операнд

Рисунок 9. Общий формат машинной команды

Назначения полей машинной команды:

· Префиксы – необязательные однобайтные элементы машинной команды. Назначение префиксов — изменить действия, выполняемые командой. Машинная команда может иметь до четырех префиксов одновременно.

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

· Байт режима адресации mod r/m, иногда называемый постбайтом, несет информацию об операндах и режиме адресации. Операнды могут находиться в памяти, а также в одном или двух регистрах. Если операнд находится в памяти, то байт mod r/m определяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса. Байт mod r/m состоит из трех полей:
- mod (два бита) определяет способ адресации и количество байтов, занимаемых в команде адресом операнда (поле смещения в команде).
- reg (3 бита) определяет либо регистр, находящийся в команде на месте второго операнда, либо возможное расширение кода операции (давая в совокупности размер поля КОП в 11 битов).
- г/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда, либо базовые и индексные регистры, применяемые для вычисления эффективного адреса (совместно с полем смещения в команде).

· Байт масштаба, индекса и базы (Scale-Index-Base – sib) используется для расширения возможностей адресации операндов. Байт sib состоит из трех полей:
- поле масштаба ss. В этом поле размещается масштабный множитель для индексного компонента index, занимающего следующие три бита байта sib. В поле ss может содержаться одно из следующих значений: 1, 2, 4, 8. При вычислении эффективного адреса на это значение будет умножаться содержимое индексного регистра.
- поле index используется для хранения номера индексного регистра, который применяется для вычисления эффективного адреса операнда;
- поле base используется для хранения номера базового регистра, который также применяется для вычисления эффективного адреса операнда. В качестве базового и индексного регистров могут использоваться практически все регистры общего назначения.

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

· Поле непосредственного операнда – необязательное поле, представляющее собой 8-, 16- или 32-разрядный непосредственный операнд. Наличие этого поля, конечно, отражается на значении байта mod r/m.