Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры Схемотехника.doc
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
14.02 Mб
Скачать

2.5. Форматы команд 16-разрядного мп

Команда может содержать от одного до шести байтов (рис.2.4)

КОП

КОП 11 reg r/m

КОП mod коп r/m

КОП mod reg r/m МБ disp СБ disp

КОП 11 коп r/m МБ data СБ data

КОП mod коп r/m МБ disp СБ disp МБ data СБ data

Формат первого байта команды показан на рис. 2.5.

7 2 1 0

коп d w

или 7 2 1 0

коп reg

или 7 4 3 2 0

коп w reg

Рис. 2.5. Формат первого байта команды

Поле d (directin) определяет направление передачи операнда. Если d=1, то направление передачи в регистр, если d=0, то из регистра.

Поле W (word) определяет тип операнда. Если W=1, то операнд - 16-разрядное слово, если W=0 - байт. Двухразрядное поле reg служит для размещения адреса сегментного регистра (табл. 2.2), а трехразрядное поле - для размещения адреса регистров общего назначения (табл. 2.3). В остальных разрядах первого байта команды размещается код операции (КОП).

Таблица 2.2 Таблица 2.3

Адреса сегментных регистров Адреса регистров общего назначения

Имя Адрес Имя регистра Адрес ( rrr )

регистра ( r r ) при W=1 при W=0

ES 00 АХ AL 000

CS 01 CX CL 001

SS 10 DX DL 010

DS 11 BX BL 011

SP AH 100

BR CH 101

DI DH 110

SI BH 111

Во втором байте команды указан способ адресации. В зависимости от способа адресации за вторым байтом команды могут следовать один или два байта непосредственных данных и необязательно (это зависит от конкретного кода команды) за ними один или два байта смещения (disp);

Формат второго байта команды:

7 6 5 3 2 0

mod reg r/m

Поле reg указывает адрес регистра (см. табл. 2.3). В командах непосредственной загрузки сегментных регистров в поле reg записывается трехразрядный код 0rr, где два разряда rr определяются из табл. 2.2.

Поле mod определяет используемый способ адресации. Следует помнить, что при выполнении команд один операнд всегда хранится в одном из регистров, а другой выбирается из памяти либо из регистра. Когда в поле mod содержится код 11, то операнд выбирается из регистра, адрес которого определяется из табл. 2.3 . Если mod  11, то это поле определяет, каким образом используется смещение disp (табл. 2.4).

Поле r/m определяет, как формируется смещение ЕА (табл. 2.4).

Таблица 2.4

mod = 00

disp

r/m отсутствует

mod = 01

disp

8 разрядов

mod = 10

disp

16 разрядов

000 (BX) + (SI)

(BX) + (SI) + disp

(BX) + (SI) + disp

001 (BX) + (DI)

(BX) + (DI) + disp

(BX) + (DI) + disp

010 (BP) + (SI)

(BP) + (SI) + disp

(BP) + (SI) + disp

011 (BP) + (DI)

(BP) + (DI) + disp

(BP) + (DI) + disp

100 (SI)

(SI) + disp

(SI) + disp

101 (DI)

(DI) + disp

(DI) + disp

110 прямая адресация

(BP) + disp

(BP) + disp

111 (BX)

(BX) + disp

(BX) + disp

Примечание: для случая r/m=110 и mod=00 используется прямая адресация, для которой ЕА определяется смещением disp.

Для одной и той же команды время вычисления исполнительного адреса зависит от способа формирования смещения ЕА, и, следовательно, время выполнения команды будет различным. В табл. П2.1 время выполнения команд выражается числом тактов, необходимых для выполнения команды без учета времени вычисления исполнительного адреса, плюс переменная ЕА, обозначающая число тактов, необходимых для вычисления исполнительного адреса. Количество тактов, требуемое для вычисления ЕА, указано в табл. 2.5. При замене сегментного регистра, который обычно указан по умолчанию, число тактов следует увеличить на два.

Таблица 2.5

Cпособ формирования ЕА (табл. 2.4)

Число тактов

Прямая адресация r/m = 110

r/m = (100,101,111) mod = 00

r/m = (100,101,110,111) mod = 01

r/m = (000,011) mod = 00

r/m = (001,010) mod = 00

r/m = (000,011) mod = 01

r/m = (000,011) mod = 10

r/m = (001,010) mod = 01

r/m = (001,010) mod = 10

6

5

9

7

8

11

15

12

16