Формирование адреса в процессорах с архитектурой IA-32

Команды работают с регистрами, константами и с операндами, находящимися в оперативной памяти, – логическими адресами. Логический (виртуальный)адрес получается аналогично приведенному выше и имеет следующий формат:

<селектор сегмента>:<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]


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: