Команды работают с регистрами, константами и с операндами, находящимися в оперативной памяти, – логическими адресами. Логический (виртуальный)адрес получается аналогично приведенному выше и имеет следующий формат:
<селектор сегмента>:<32-разрядный эффективный адрес>
Эффективный 32-разрядный адрес (ЕА) в общем случае вычисляется сложением любой комбинации следующих четырех адресных элементов:
ЕА = База + (Индекс * Масштаб) + Смещение
Смещение – 8-, 16- или 32-разрядное значение.
База (Base) – содержимое любого из 32-разрядных регистров общего назначения.
Индекс (Index) – содержимое любого из 32-разрядных регистров общего назначения, кроме ESP.
Масштаб (Scale) – константа 2, 4 или 8, на которую умножается значение индексного регистра.
Режимы адресации для процессоров с архитектурой IA-32. Работа с массивами на ассемблере.
Режимы адресации для процессоров с архитектурой IA-32.
Есть 11 основных режимов адресации.
Регистровый режим адресации.
Здесь все достаточно просто. В командах в качестве операндов используются регистры.
|
|
Например:
MOV AL, BH //8-разрядный регистровый режим адресации
MOV AX, BX //16-разрядный регистровый режим адресации
MOV ЕАХ, ЕВХ //32-разрядный регистровый режим адресации
Непосредственный режим адресации.
В команду непосредственно встраивается константа.
Например:
ADD АН,6
ADD AX,12345
ADD ЕАХ,123456
Режим прямой адресации.
Адрес операнда задается в виде 8-, 16- или 32-битового смещения в самой команде, например:
DEC WORD PTR h[500]
или:
DEC WORD PTR h+500
INC DWORD PTR a
Режим регистровой косвенной адресации.
В этом случае базовый или индексный регистр содержат адрес операнда.
Например:
SDB DX, [SI]
SUB EDX, [ЕСХ]
5. Базовая адресация.
Содержимое базового регистра суммируется со смещением.
Например:
ADD DX, [BX]+100
SUB EDX, [ЕАХ]+10
Индексная адресация.
Содержимое индексного регистра суммируется со смещением.
Например:
ADD DX, brr[BP]
SUB EAX,arr[ЕАХ]
Индексная адресация с масштабированием.
Содержимое индексного регистра умножается на масштабный коэффициент и суммируется со смещением.
Например:
SUB EAX,arr[EAX*4]
Базово-индексная адресация.
Содержимое базового регистра складывается с содержимым индексного регистра.
Например:
ADD EAX,[EBX+ESI]