Скачиваний:
23
Добавлен:
11.05.2015
Размер:
998.91 Кб
Скачать

159B:0102 e000 loopnz 0104

-d 200 201

159B:0200 20 2B +

-

После выполнения: 16A5:0200 202B (в двоичном виде: 0010 0000 0010 1011), т.е. содержимое ячейки, на которую указывает пара DS:BX, дополнено до единицы.

Процессоры до 80386 могли использовать, в качестве индексных, только регистры BX, SI, DI и BP, более поздние допускают использование также EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

Если регистр сегмента не указан, подразумевается использование DS, за исключением случая адресации через EBP, ESP или BP — в этом случае сегментный регистр по умолчанию — SS.

7.6. Адресация по базе

При использовании адресации по базе МП 8086 берет в регистре BX, SI, DI или BP смещение, складывает его со значением сдвига, заданным в команде, добавляет к сдвинутому регистру сегмента и по полученному адресу берет операнд.

Рассмотрим команду MOV AX, [0Eh+BX]:

-a 100

159B:0100 mov ax,[0e+bx]

159B:0103

-r bx

BX 0200

:20

-t

AX=014E BX=0020 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=159B ES=159B SS=159B CS=159B IP=0103 NV UP EI PL NZ NA PE NC

159B:0103 0004 ADD [SI],AL DS:0000=CD

После выполнения команды: BX=0020 AX=014E, т.е. из ячейки памяти со смещением 0020 + 000E = 002E взят операнд и помещен в аккумулятор.

7.7. Косвенная регистровая адресация с индексированием

При использовании косвенной регистровой адресации с индексированием МП 8086 берет в регистре BX или BP первое смещение (базу), складывает со смещением, взятым в регистре SI или DI (индекс), добавляет к сдвинутому регистру сегмента и по полученному адресу берет операнд.

Рассмотрим INC byte ptr [BX+DI] (byte ptr - префикс размерности операнда – 8 бит):

-a 100

159B:0100 inc byte ptr [bx+di]

159B:0102

-r bx

BX 0020

:20

-r di

DI 0000

:100

-d 120 12f

159B:0120 01 00 BF 01 00 CD 21 72-50 8B D8 B8 00 44 CD 21 ......!rP....D.!

-r

AX=014E BX=0020 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0100

DS=159B ES=159B SS=159B CS=159B IP=0100 NV UP EI PL NZ NA PE NC

159B:0100 FE01 INC BYTE PTR [BX+DI] DS:0120=01

-t

AX=014E BX=0020 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0100

DS=159B ES=159B SS=159B CS=159B IP=0102 NV UP EI PL NZ NA PO NC

159B:0102 0e push cs

-d 120 121

159B:0120 02 00 ..

-

т.е. операндно адресу 0100 + 0020 = 0120 увеличен на 1.

Процессоры до 80386 допускали использование следующих комбинаций регистров: BX+SI, BX+DI, BP+SI, BP+DI. Более поздние процессоры допускают также использование любых комбинаций регистров EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP. Запрещенной является только комбинация ESP+ESP.

7.8. Адресация по базе с индексированием

При использовании индексированной базовой адресации МП 8086 берет смещение (базу) в регистре BX или BP, складывает со смещением (индексом), взятым в регистре SI или DI, складывает со сдвигом, заданным в команде, добавляет к сдвинутому регистру сегмента и по полученному адресу берет операнд.

Рассмотрим команду MOV AX,[0200+BX+DI]:

-a 100

159B:0100 mov ax,[200+bx+di]

159B:0104

-r bx

BX 0020

:40

-r di

DI 0100

:60

-d 2a0 2af

159B:02A0 D8 80 7F FF 5C 74 04 C6-07 5C 43 89 1E CD DF 5B ....\t...\C....[

-r

AX=014E BX=0040 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0060

DS=159B ES=159B SS=159B CS=159B IP=0100 NV UP EI PL NZ NA PO NC

159B:0100 8B810002 MOV AX,[BX+DI+0200] DS:02A0=80D8

-t

AX=80D8 BX=0040 CX=03C0 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0060

DS=159B ES=159B SS=159B CS=159B IP=0104 NV UP EI PL NZ NA PO NC

159B:0104 0400 ADD AL,00

-

т.е. по адресу 0200 + 0040 + 0060 = 02A0 взят операнд.

Соседние файлы в папке Введение в вычислительную технику.