Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОП - лекции.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
292.66 Кб
Скачать

Адресация памяти в командах Ассемблера

Существует 3 основных режима адресации:

  1. Прямая – адрес операнда содержится непосредственно в команде

  2. Косвенная – в команде указан регистр, в котором находится адрес операнда

  3. Относительная – адрес, вычисляется относительно некоторого регистра

В микропроцессорах Intel принято следующее ограничение : в памяти может находиться не более одного операнда команды.

Способы адресации:

  1. Регистровая прямая адресация – операнд находится в одном из регистров общего назначения

mov AH,BL

mov AX,BX

  1. Непосредственная адресация – в команде указывается непосредственное значение одного из операндов.

mov AX,02486h

mov AL,025h

mov AX,025h

  1. Прямая адресация – адрес операнда задан непосредственно в команде

mem dw 1

mem2 db 290

inc mem

mov DX,mem

Иногда в команде нужно использовать не значение ячейки памяти, а её смещение относительно начала сегмента. Для этого используется конструкция:

Offset Имя ячейки

Пример:

mov DX, offset mem1

При прямой адресации обращение к переменным или ячейкам происходит через их смещение, но адрес состоит не только из смещения, но и из адреса сегмента. По умолчанию адрес сегмента берётся из сегментного регистра связанного директивой assume. Эта директива имеет следующий вид:

Assume Сегментный регистр : имя сегмента

При необходимости обращения к другому сегменту можно непосредственно указать сегментный регистр.

mov AX,ES:0h

mov AX,ES:mem3

  1. Косвенная регистровая адресация. В команде указывается регистр содержащий смещение операнда. В процессоре 80.86 для косвенной адресации допускается использовать только 4 регистра.

BX,BP,SI,DI

При использовании BX,SI,DI используется сегментный регистр DS

Через регистр BP используется сегментный регистр SS

mov [BX],AX

mov ES:[BX],AL

mov BX,[AX]-ошибка, т.к. AX – нет в перечне регистров

Не разрешается через AX косвенная адресация

  1. Базовый режим адресации – смещение операнда равно сумме содержимого одного из базовых регистров BX или BP и некоторого значения заданного в команде

mov AX,[BX]10

Mov AX,[BP]10

Эта запись имеет различные варианты

mov AX,[BX]10 = [BX+10] = [BX]+10 = 10[BX]

  1. Индексный режим адресации – исполнительный адрес операнда вычисляется как сумма содержимого одного из индексных регистров SI или DI и смещение.

mov AX, TEMP[SI]

Рисунок

  1. Базово-индексная адресация со смещением или без – исполнительный адрес вычисляется как сумма, содержимого базового регистра, индексного регистра и ,возможно, смещения.

mov AX,[BX][SI]

mov AX, TEMP [BX],[SI]

TEMP BX

Общий принцип косвенной адресации в процессоре 8086

Можно описать схемой:

[ База ] + [ Индекс ] + Смещение

+

База – отсутствует или BX или BP

Индекс – отсутствует или SI или DI

Смещение – отсутствует или 8-бит или 32-бита

В 32 разрядных и последующих процессорах принципы косвенной адресации существенно расширены за счёт расширения участвующих в ней регистров, а также добавлены множители

В современных процессорах так:

[ База ] + [ Индекс ] * масштаб + Смещение

+ * +

Вторая схема применяется только при использовании 32-разрядных и выше регистров.

Mov AX, [ECX][EDI * 2] TEMP

Mov AX, [CX][DI*2] TEMP - ошибка