Assembler - язык неограниченных возможностей

         

Значения поля ModRM


Поле R/O (биты 5– 3) содержит либо дополнительные три бита кода команды, либо код операнда, который может быть только регистром. Будем обозначать второй случай reg, а в первом записывать используемые биты.

Поля MOD (биты 7 – 6) и R/M (биты 3 – 0) определяют операнд, который может быть как регистром, так и переменной в памяти:

MOD = 11, если используется регистровая адресация и R/M содержит код регистра reg;

MOD = 00, если используется адресация без смещения ([ВХ + SI] или [EDX]);

MOD = 01, если используется адресация с 8-битным смещением (variable[BX + SI]);

MOD = 10, если используется адресация с 16- или 32-битным смещением.

Значение поля R/M различно в 16- и 32-битных режимах.

R/M в 16-битном режиме:

000 — [ВХ + SI]

001 — [ВХ + DI]

010 — [BP + SI]

011 — [ВР + DI]

100 — [SI]

101 — [DI]

110 — [ВР] (кроме MOD = 00 — в этом случае после ModR/M располагается 16-битное смещение, то есть используется прямая адресация)

111 — [ВХ]

R/M в 32-битном режиме:

000 — [ЕАХ]

001 — [ЕСХ]

010 — [EDX]

011 — [ЕВХ]

100 — используется SIB

101 — [ЕВР] (кроме MOD = 00 — в этом случае используется SIB, после которого располагается 32-битное смещение)

110 — [ESI]

111 — [EDI]



Содержание раздела