Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 1).doc
Скачиваний:
148
Добавлен:
08.03.2015
Размер:
435.2 Кб
Скачать

Базовая адресация

Источником базового адреса могут служить только базовые регистры BREG (BX,BP). В этом случае операнд может записываться в следующем виде:

[BREG][Const] или [BREG]+Const или [BREG+Const].

Во всех случаях смещение disp=Const, и эффективный адрес EA=(BREG)+disp.

Пример 3.35:

MOV AX, [BP][10] ; Загрузка из стека 6-го

MOV AX, [BP+10] ; слова области, адресуемой BP.

MOV [BX]+Temp, AL ; Запись (AL) в байт Temp

; области, адресуемой BX.

При этом имя Temp должно быть определено как константа.

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

Индексная адресация

Источником индексного адреса могут служить только индексные регистры IREG (SI,DI). В этом случае операнд может записываться в следующем виде:

1) NameVar[IREG] ; disp=offset NameVar

2) NameVar[IREG+Const] ; disp=offset NameVar+Const.

При этом эффективный адрес EA=disp+(IREG).

Пример 3.36:

MOV Array[SI], AX ; Запись AX в текущий элемент массива ; Array

MOV DX, Array[DI10] ; Загрузка DX элементом массива Array,

; отстоящим от элемента, адресуемого DI, ; на 10 байтов.

Индексная адресация используется для обращения к элементам одномерных поименованных массивов в тех случаях, когда имя массива известно на этапе разработки программы, а номер элемента, к которому осуществляется обращение, вычисляется при выполнении программы.

По существу базовая и индексная адресация в МП ВМ86/ВМ88 аналогичны. Это обусловлено тем, что и базовые, и индексные регистры имеют одинаковую длину в 16 бит. При таком рассмотрении оба эти способа адресации считаются одним способом, называемым регистровой относительной адресацией.

Базово-индексная адресация

В этом случае операнд записывается в следующем виде:

[BREG][IREG] или [BREG+IREG].

При этом эффективный адрес EA=(BREG)+(IREG).

Пример 3.37:

MOV AX, [BX][SI] ;Загрузка в AX элемента двумерного

MOV AX, [BX+SI] ;массива с координатами (BX),(SI)

Базовоиндексная адресация является гибким режимом адресации, так как позволяет вычислять и варьировать два компонента адреса. Это может использоваться при обращении к элементам двумерных массивов.

Относительная базовоиндексная адресация

Этот способ является наиболее сложным способом адресации. Операнд может записываться в следующем виде:

1) NameVar[BREG][IREG] ; disp=offset NameVar

2) [BREG][Const][IREG] ; disp=Const

3) [BREG][IREG][Const] ; disp=Const

4) [BREG+Const1][IREG+Const2] ; disp=Const1+Const2

При этом эффективный адрес EA=(BREG)+(IREG)+disp.

Пример 3.38:

MOV Array[BX][SI], AX ; Запись (AX) в текущий элемент

; двумерного массива Array MOV [BX][1020][DI],AL ; Запись (AL) в текущий элемент

; 10-ой строки двумерного

; массива с косвенным именем MOV [BX][SI][10], AL ; Запись (AL) в 10-ый элемент

; текущей строки двумерного

; массива с косвенным именем

Относительная базовоиндексная адресация используется для обращения к элементам двумерных массивов с какимлибо одним фиксированным параметром. При этом может быть зафиксировано имя массива, номер выбираемой строки или элемента в ней.