Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ ЛЕКЦИЙ ПО АССЕМБЛЕРУ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
471.55 Кб
Скачать

Косвенная адресация

MOD = 00 – косвенная адресация

r/m = 100,101,111

EA = (BX) MOV AX,[BX]

EA = (SI) ADD AL,[SI]

EA = (DI) SUB [DI],BP

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

Команды, использующие косвенную адресацию, всегда адресуются по DS

Физический адрес = DS + EA -> адрес в сегменте данных.

Косвенная адресация через BP не реализована т.к. имеется исключение [d16] (прямая адресация. Однако косвенная адресация через BP моделируется использованием клетки r/m = 110, MOD = 01.

EA = (BP) + d8, приусловии d8=0. Напимер,

MOV [BP+0],AX, что равно MOV [BP],AX и

MOV BX,[BP+0], что равно MOV BX,[BP].

Адресация выполняется по умолчанию через регистр SS, физический адрес равен = SS + EA, т. е. выполняется обращение к сегменту стека.

┌─< MOV [BP],AX

│ d w mod reg r/m dispL

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

│ KOП │ 0 │ 1 │ │ 01│000│110││ 00 │ -> смещение = 0

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

└─> MOV [BP+0],AX └─> номер АХ

ПРИМЕР ФОРМАТА КОМАНД С ЧИСТО КОСВЕННОЙ АДРЕСАЦИЕЙ

MOV AX,[BX]

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

│ KOП │ 1 │ 1 │ │ 00│000│111│ disp -> смещение = 0

└───────┴───┴───┘ └───┴───┴───┘└ ─ ─ ─ ─ ┘ поля disp нет

EA = (BX)

При использовании косвенной адресации команды с постбайтом самые короткие – 2 байта.

В данной команде 2 операнда:

1) регистр – кодируется 3-мя битами (поле REG)

2) в памяти, кодируется 5 битами (поле MOD, r/m)

Пример:

Вычислить сумму элементов массива Х:

x db 10 DUP (?)

n dw 10

s db ?

;-----------------------------------

;считаем, что массив Х каким-то образом определен.

MOV DL,0 ; - сумматор

MOV CX,N ; - число повторений -> счетчик цикла

MOV BX,offset X

;беззнаковое смещение – BX положить равным адресу поля Х

0 1 2 9

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

│ Х1 │ Х2 │ ......... │ Х10 │

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

Адрес Х – это одновременно и адрес 1-го элемента – Х1.

Для того, чтобы перейти к Х2 нужно BX:=BX+1

ML: ADD DL,[BX]

INC BX ; переадресация на следующий элемент мас-

DEC CX ; сива уменьшили счетчик

JNZ ML

MOV S,DL

Регистровая адресация

Если операнд находится в регистре, то такая адресация называется регистровой, однако в общем случае говорят, о регистровой адресации, когда оба операнда в регистрах (MOD = 11).

Пример

ADD AL,CL

d w mod reg r/m

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

│ KOП │ 1 │ 0 │ │ 11│000│001│

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

│ └─>AL │

└─---------->CL

Все команды с постбайтом имеют длину 2 байта.

MOV BP,DX d w mod reg r/m

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

│ KOП │ 1 │ 1 │ │ 11│101│010│ – в этом случае – 2 байта

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