Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_на_ассембл_для_WINLOWS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
907.78 Кб
Скачать

1.2.6. Способы адресации операндов

Процессор поддерживает 11 способов адресации операндов. В языке ассемблера в командах или директивах в качестве операндов в общем случае используются выражения. В свою очередь выражения состоят из операндов и знаков операций. Операндами могут быть константы, имена программно доступных регистров, меток или переменных. Знаки операций связывают операнды и указывают на необходимость выполнения над ними арифметических, логических и других операций в процессе трансляции. Рассмотрим типы операндов с точки зрения способа адресации.

Регистровый операнд

Если в команде на месте операнда находится имя регистра, это означает, что команда выполняет соответствующее действие над содержимым регистра. Такой способ адресации операнда называется регистровым. Например:

MOV АХ,ВХ

Содержимое регистра ВХ передается в регистр АХ.

Непосредственный операнд

Операнд находится в команде в виде константы, либо транслятор преобразует выражение в фиксированное значение. Тип операнда и способ адресации в примерах рассматривается относительно второго операнда. Первый операнд - регистровый. Например:

М2 = 1024

MOV CX,7 ;пример 1

MOV SI,OFFSET M1 ;пример 2

MOV DX,M2 ;пример3

В примере 1 константа 7, определенная непосредственно в команде, заносится в регистр СХ. Во втором примере второй операнд является адресом (смещением), на который указывает имя Ml. Значение этого смещения вычислит ассемблер и поместит в качестве константы в код. В третьем случае необходимо, чтобы имени М2 директивами EQU или = было присвоено какое-нибудь значение.

Переменная

Переменная - имя, указывающее на ячейку памяти или на первую ячейку области памяти. Например:

MOV СХ,[ВОХ]

Содержимое ячейки памяти, помеченной в тексте программы именем BOX, передается в регистр CХ. Такой способ адресации называется прямым и все вышеперечисленные способы относятся к прямым способам адресации.

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

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

Индексная или базовая адресация

В примерах с этими способами адресации используем тридцатидвухразрядные регистры. Содержимое базового или индексного регистра является адресом операнда.

MOV AL,[EBX]

MOV DL,[ESI]

Эта адресация может осуществляться с масштабированием, т.е. содержимое базового или индексного регистра умножается на масштабный коэффициент – 2,4 или 8.

MOV AX,[EBX*2]

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

В этом случае содержимое базового регистра складывается с содержимым индексного. Например:

MOV EAX,[ESI+EBX]

Эта адресация может использоваться с масштабированием. Адресом операнда является сумма содержимого базового регистра и содержимого индексного регистра, умноженного на масштабный коэффициент. Например:

MOV ECX,[ESI*4+EB X]

Базовая или индексная адресация со смещением

Адрес операнда определяется суммой смещения и содержимого индексного регистра. Например:

MOV AX,BUF[ESI]

Содержимое индексного регистра может умножаться на масштабный коэффициент.

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

Адресом операнда является сумма смещения, содержимого индексного и базового регистров. Например:

MOV AX,BUF[ESI+EBX]

Содержимое базового или индексного регистра может умножаться на масштабный коэффициент.