Введение в технологию программирования на языке Ассемблера, страница 3

                                                                                          Таблица П.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