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

Прямая адресация с индексированием

r/m │ mod = 01

│ mod = 10

──────┼───────────

100 │(SI)+d8(16) = EA

101 │(DI)+d8(16) = EA

Данный способ адресации по своим возможностям и назначению аналогичен прямой адресации с базированием. Отметим, что в данном случае регистры SI и DI обеспечивают обращение к сегменту данных.

SAB A[SI],DX

/ \

d16 + (SI) -> EA

┌── A 0 2 4

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

│ │ A1 │ A2 │ ......... │ An │

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

A - базовый адрес массива

(SI) – индекс

Пусть SI = 0, тогда -> A[SI] -> A1

SI = 4, тогда -> A[SI] -> A3

SUB A [SI] , DX

d w mod reg r/m D16

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

│ KOП │ 0 │ 1 │ │ 10│010│100│ │адр.масив│

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

│ └─>DX │

└─---------->(SI)+D16

Пример: Определить в массиве А сумму элементов с четными номерами,

S=A2+A4+…

A DW 10 DUP (?)

N DW 10

S DW ?

; CX:= N DIV 2

; Начальное значение DI = 2. Приращение индекса = 4;

MOV CX,N

SHR CX,1; cx:=cx/2;

MOV DX,0; Сумматор

MOV DI,2 ;начальное значение индекса

ML: ADD DX,A[DI]

ADD DI,4 ;переадресация

DEC CX

JNZ ML

MOV S,DX

Прямая адресация с базированием

r/m │ mod = 01 Команды имеют длину 3,4 байта.

│ mod = 10 Используются для обработки струк-

─────┼─────────── туированных типов данных.

110 │ (BP)+d8(16)

111 │ (BP)+d8(16)

MOV X[BX],AX EA = (BX) + d16

ADD Y[BP],CX EA = (BP) + d16

Данный способ адресации работает точно также как и прямая адресация с индексированием. Он выделен только потому, что регистры SI, DI - индексные, а BX, BP - регистры базы.

В данной команде регистр BP адресуется через DS, т. е. к сегменту данных, т.к. предполагаем, что массив Y описан в сегменте данных.

Адресация по сумме d8 и индексный регистр

ЕА = (SI) + d8

ЕА = (DI) + d8

d8 – короткое знаковое смещение. До выполнения операций сложения d8 расширяется до слова.

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

│ A1 │ A2 │ A3 │ ......... │ An │

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

Пусть А3 – максимальный элемент.

SI – адрес элемента А3

MOV AL,[SI-1] ;AL:=A2 – предшествующий элемент

MOV BL,[SI+1] ;BL:=A4 – следующий элемент

Такая форма записи команд используется, когда необходимо от текущего адреса отступить вперед не более чем на 127 и отступить назад не более чем на 128. Отступ реализуется значением d8.

Если адресное расстояние выйдет за диапазон, то будет сформировано смещение d16

MOV AL,[SI-1]

d w mod reg r/m DISP

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

│ KOП │ 1 │ 0 │ │ 01│000│100│ │ FF │

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

│ └─>AL │

└─---------->(SI)+D8

MOV AL,[SI+1]

d w mod reg r/m DISP

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

│ KOП │ 1 │ 0 │ │ 01│000│100│ │ 01 │

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

│ └─>AL │

└─---------->(SI)+D8