А д р е с а ц и я

Адресация данных.

Для четкого понимания того, как осуществляется адресация данных, проанализируем способ образования адреса операнда. Адрес операнда формируется по схеме сегмент:смещение. Селектор сегмента можно указать явным или неявным образом. Обычно селектор сегмента загружается в сегментный регистр, а сам регистр выбирается в зависимости от типа выполняемой операции.

Тип операции Регистр сегмента Сегмент Описание
Команды процессора CS Програмный сегмент Используется при вызовах команд процессора.
Обращение к стеку SS Сегмент стека Используется во всех операциях со стеком, а также в операциях с памятью, в которых применяется стек или строка-приемник при выполнении строковых операций.
Локальные данные DS Сегмент данных Используется во всех операциях с данными, исключая те, в которых применяется стек или строка-приемник при выполнении строковых операций.
Строки-приемники ES Сегмент данных, адресуемый регистром ES Операнд-приемник в строковых операциях.

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

Пусть, например, требуется сохранить содержимое регистра ЕАХ в памяти, адресуемой сегментным регистром ES и смещением, находящимся в регистре ЕВХ. В этом случае можно использовать команду mov ES:[EBX],EAX

Обратите внимание на то, что после имени сегмента указывается символ двоеточия.

Режимы адресации.

В зависимости от местоположения источников образования полного (абсолютного) адреса в языке ассемблера различают следующие способы адресации операндов:

  • Регистровая адресация.
    Подразумевает использование в качестве операнда регистра процессора, например:
    PUSH DS
    MOV BP,SP

  • Прямая адресация.
    При прямой адресации один операнд представляет собой адрес памяти, второй – регистр:
    MOV Data,AX

  • Непосредственная адресация.
    Применяется, когда операнд, длинной в байт или слово находится в ассемблерной команде:
    MOV AH,4CH

  • Косвенная адресация.
    При использовании косвенной адресации абсолютный адрес формируется исходя из сегментного адреса в одном из сегментных регистров и смещения в регистрах BX, BP, SI или DI:
    MOV AL,[BX] ; База – в DS, смещение – в BX
    MOV AX,[BP] ; База – в SS, смещение – в BP
    MOV AX,ES:[SI] ; База – в ES, смещение – в SI

  • Базовая адресация.
    В случае применения базовой адресации исполнительный адрес является суммой значения смещения и содержимого регистра BP или BX, например:
    MOV AX,[BP+6] ; База – SS, смещение – BP+6
    MOV DX,8[BX] ; База – DS, смещение – BX+8

  • Индексная адресация.
    При индексной адресации исполнительный адрес определяется как сумма значения указанного смещения и содержимого регистра SI или DI так же, как и при базовой адресации, например:
    MOV DX,[SI+5] ; База – DS, смещение – SI+5

  • Базово-индексная адресация.
    Подразумевает использование для вычисления исполнительного адреса суммы содержимого базового регистра и индексного регистра, а также смещения, находящегося в операторе, например:
    MOV BX,[BP][SI] ; База – SS, смещение – BP+SI
    MOV ES:[BX+DI],AX ; База – ES, смещение – BX+DI;
    MOV AX,[BP+6+DI] ; База – SS, смещение - BP+6+DI


Программирование на Машинно-Ориентированных Языках.
Преподаватель: Коробов С.А.