Таблица П.7
Формирование эффективного адреса памяти при 16 битовой адресации
Поле r/m |
Адрес памяти второго операнда |
||
mode = 00 |
mode = 01 |
mode = 10 |
|
000 |
BX + SI |
BX + SI + d8 |
BX + SI + d16 |
001 |
BX + DI |
BX + DI + d8 |
BX + DI + d16 |
010 |
SS:[BP + SI] |
SS:[BP + SI + d8] |
SS:[BP + SI + d16] |
011 |
SS:[BP + DI] |
SS:[BP + DI + d8] |
SS:[BP + DI + d16] |
100 |
SI |
SI + d8 |
SI + d16 |
101 |
DI |
DI + d8 |
DI + d16 |
110 |
d16 |
SS:[BP + d8] |
SS:[BP + d16] |
111 |
BX |
BX + d8 |
BX + d16 |
Таблица П.8
Формирование эффективного адреса памяти при ЕА при 32 битовой адресации,
при r/m ¹ 100.
Поле r/m |
Адрес памяти второго операнда |
||
mode = 00 |
mode = 01 |
mode = 10 |
|
000 |
EAX |
EAX + d8 |
EAX + d32 |
001 |
ECX |
EC + d8 |
ECX + d32 |
010 |
EDX |
EDX + d8 |
EDX + d32 |
011 |
EBX |
EBX + d8 |
EX + d32 |
100 |
имеется SIB |
имеется SIB |
имеется SIB |
101 |
d32 |
SS:[EBP + d8] |
SS:[EBP + d32] |
110 |
ESI |
ESI + d8 |
ESI + d32 |
111 |
EDI |
EDI + d8 |
EDI + d32 |
Таким образом, присутствие в команде байта SIB обусловлено в самой кодировке байта “mod R/M”, а именно кодом поля r/m этого байта.
Отметим, что при 16 битовой адресации (R-режима) используются только регистры BX, BP, SI и DI (в стековых ситуациях неявно привлекается регистр SP). При 32 битовой адресации (Р-режиме) для адресации можно использовать любой регистр общего назначения и, кроме того, может быть задействован байт SIB (Scale, Index, Base – масштаб, индекс, база), формат которого приведен на рис.П.4, а кодирование – в табл. П.10.
7 6 5 4 3 2 1 0
SS |
Index |
Base |
Рис.П.4. Формат байта SIB при 32 битовой адресации.
SS - масштабный множитель (коэффициент) для режима масштабирования индексной адресации. Он определяется разрядностью адресуемых данных (байт, слово, двойное слово, квадрослово).
Index - код регистра общего назначения, используемого как индексный регистр.
Base - код регистра общего назначения, используемого как базовый регистр.
Таблица П.10
Кодирование полей Index и SS в байте SIB
Код поля Index |
Регистр, используемый как индексный |
Код поля SS |
Множитель для содержимого индексного регистра |
000 |
EAX |
00 |
× 1 |
001 |
ECX |
01 |
× 2 |
010 |
EDX |
10 |
× 4 |
011 |
EBX |
11 |
× 8 |
100 |
Отсутствует |
||
101 |
EBP |
||
110 |
ESI |
||
111 |
EDI |
||
Примечание: Когда поле Index содержит 100, показывая отсутствие индексного регистра, поле SS должно содержать 00; в противном случае эффективный адрес не определен.
Таблица П.11
Формирование эффективного адреса памяти ЕА при 32 битовой адресации,
но при r/m = 100.
Поле base |
Адрес памяти второго операнда |
||
mode = 00 |
mode = 01 |
mode = 10 |
|
000 |
EAX + SS × ind |
EAX + SS × ind + d8 |
EAX + SS × ind + d32 |
001 |
ECX + SS × ind |
ECX + SS × ind + d8 |
ECX + SS × ind + d32 |
010 |
EDX + SS × ind |
EDX + SS × ind + d8 |
EDX + SS × ind + d32 |
011 |
EBX + SS × ind |
EBX + SS × ind + d8 |
EBX + SS × ind + d32 |
100 |
SS:[ESP+SS × ind] |
SS:[ESP + SS × ind + d8] |
SS:[ESP + SS × ind + d32] |
101 |
d32 + SS × ind |
SS:[EBP + SS × ind + d8] |
SS:[EBP + SS × ind + d32] |
110 |
ESI + SS × ind |
ESI + SS × ind + d8 |
ESI + SS × ind + d32 |
111 |
EDI + SS × ind |
EDI + SS × ind + d8 |
EDI + SS × ind + d32 |
Таким образом, возможные методы формирования смещения в сегменте (эффективного адреса) могут быть представлены следующей схемой:
База Индекс Масштаб Константа
(Base) (Index) (Scale) (Displacement)
В заключение приведем в таблице П.12 сводные сведения об использовании регистров общего назначения в командах МП семейства Х86.
Таблица П.12
Использование РОН в командах МП семейства Х86
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.