Описание процессора i8086 для программиста


Байт ModRegR/M


Основное назначение байта ModRegR/M – определять операнды, явно задаваемые в данной команде. Он состоит из трёх полей и имеет следующую структуру:

----T---T---T---T---T---T---T---¬

¦ M o d ¦   R e g   ¦   R / M   ¦

L---+---+---+---+---+---+---+----

7   6   5   4   3   2   1   0

Поле Mod определяет местоположение одного из операндов инструкции – в регистре или в памяти; в последнем случае совместно с полем R/M оно определяет способ вычисления эффективного адреса операнда (см. параграф “Операнды в памяти” подраздела 2.4.1 “Адресация операндов”).

Поле Reg либо указывает регистр, являющийся операндом инструкции, либо является расширением кода операции. Как номер регистра-операнда поле Reg используется только в инструкциях вида “регистр–регистр” или “регистр–память”; в инструкциях вида “регистр–непосредственный операнд”, а также в инструкциях, имеющих только один явно заданный операнд, это поле является частью кода операции.

Поле R/M содержит либо номер регистра–операнда инструкции, либо совместно с полем Mod определяет способ вычисления эффективного адреса операнда, находящегося в памяти. Интерпретация поля R/M зависит от содержимого поля Mod.

Кодировка регистров общего назначения в полях Reg и R/M осуществляется следующим образом:

– AX или AL – 000;

– CX или CL – 001;

– DX или DL – 010;

– BX или BL – 011;

– SP или AH – 100;

– BP или CH – 101;

– SI или DH – 110;

– DI или BH – 111.

Разрядность используемого регистра (8- или 16-разрядный) определяется кодом операции.

Местоположение операнда

определяется полями Mod и R/M следующим образом.

R/M

Mod

00

01

10

11

000

[BX+SI]

[BX+SI]+disp8

[BX+SI]+disp16

AX/AL

001

[BX+DI]

[BX+DI]+disp8

[BX+DI]+disp16

CX/CL

010

[BP+SI]

[BP+SI]+disp8

[BP+SI]+disp16

DX/DL

011

[BP+DI]

[BP+DI]+disp8

[BP+DI]+disp16

BX/BL

100

[SI]

[SI]+disp8

[SI]+disp16

SP/AH

101

[DI]

[DI]+disp8

[DI]+disp16

BP/CH

110

disp16

[BP]+disp8

[BP]+disp16

SI/DH

111

[BX]

[BX]+disp8

[BX]+disp16

DI/BH

<


- Начало -  - Назад -  - Вперед -