Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
I8086.DOC
Скачиваний:
64
Добавлен:
02.05.2014
Размер:
1.36 Mб
Скачать

Байт ModRegR/m

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

┌───┬───┬───┬───┬───┬───┬───┬───┐

│ M o d │ R e g │ R / M │

└───┴───┴───┴───┴───┴───┴───┴───┘

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

Если полеModсодержит значение 11, полеR/Mопределяет регистр общего назначения, являющийся операндом инструкции. Разрядность регистра зависит от разрядности выполняемой инструкции и определяется кодом операции.

Значения поля Mod, равные 00, 01 и 10, определяют операнд в памяти. Значение 00 указывает, что при вычислении эффективного адреса операнда отклонение не используется; значение 01 указывает, что используется 8-разрядное отклонение, находящееся в байте, следующем за байтомModRegR/M; значение 10 указывает, что используется 16-разрядное отклонение, записанное в двух байтах, следующих за байтомModRegR/M, в обычном порядке (“младший–старший”).

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

Комбинация Mod=00 иR/M=110 является исключением из общего правила: эффективный адрес операнда равен 16-разрядному отклонению, следующему в коде команды непосредственно за байтомModRegR/M; содержимое регистров общего назначения в формировании эффективного адреса для этого случая не используется.

Когда в состав эффективного адреса входит содержимое регистра BP, для формирования физического адреса операнда используется селектор сегмента стека, находящийся в регистреSS. Если же при вычислении эффективного адреса регистрBPне используется, физический адрес формируется с помощью селектора сегмента данных их регистраDS. И в том, и в другом случае используемый по умолчанию сегментный регистр может быть изменён с помощью префикса замены сегмента, входящего в состав кода команды.