Смотрите описание боди массаж у нас.
В этой сложной структуре КОП может занимать один или два байта. Адресная часть команды может либо вообще отсутствовать, либо включать в свой состав от одного (ModR/M) до 12 байтов.
Адресная информация, закодированная в такой сложной команде, может содержать следующие сведения:
Длина префикса 1 байт. Имеется всего 5 префиксов для Х86
КОП — код операции. Длина 1 байт. 0-й бит КОП во многих (но не во всех) командах показывает, производится ли операция со словом (=1) или с байтом (=0). 1-й бит КОП в двухадресных командах указывает, какой из операндов является приемником.
Длина 1 байт. Постбайт адресации показывает, где находятся операнды. Один из операндов (первый) может быть расположен в регистре (регистровая адресация) или в произвольной ячейке ОЗУ (все способы адресации кроме непосредственной). Второй операнд может находиться в теле команды (непосредственная адресация) или в регистре (регистровая адресация). Каждый из операндов может быть как источником, так и приемником (за исключением непосредственной адресации: непосредственный операнд может быть только источником). Структура системы адресации несимметрична.
Поля mod и r/m задают место расположения первого операнда. Поле reg задает положение второго операнда.
Значения поля mod:
11 — операнд в регистре (при остальных mod операнд в ОЗУ, а регистры, на которые указывают поля mod и r/m, содержат компоненты адреса операнда);
10 — смещение два байта (без знака);
01 — смещение один байт (со знаком);
00 — смещение в команде отсутствует.
Длина 1 байт (при mod-01) или 2 байта(при mod=10).
Длина 1 или 2 байта.
Рисунок иллюстрирует различные способы адресации.
В 32-х разрядных процессорах для кодирования расширенных регистров появился в формате после постбайта SIB-байт. Байт SIB включает в себя следующие поля: