Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФОРМАТ КОМАНД.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
616.45 Кб
Скачать

Приложение П.2

Атрибуты размеров операнда и адреса, а также формат команды в процессорах семейства х86

1. Атрибуты размеров операнда и адреса.

Процессоры семейства iX86 могут работать как с 16-, так и с 32-битовыми адресами. При работе в реальном режиме, размер адресов и операндов, по умолчанию составляет 16 бит. Для программ, работающих в защищенном режиме, размер адреса и операнда определяется битом D из дескриптора кодового сегмента. При D=0, размер адреса и операнда составляет 16 бит, при D=1 – равен 32 битам. Однако, как размер операнда, так и размер адреса может быть изменен при помощи специального префикса команды. При этом, код префикса размера операнда равен 66H, а код префикса размера адреса – 67Н.

Результаты воздействия комбинации установки бита D в дескрипторе кодового сегмента и атрибутов размеров операнда и адреса, определенных в команде, иллюстрируется таблица П.2.1.

Таблица П.2.1

Установленный бит D дескриптора

0

0

0

0

1

1

1

1

Использование префикса размера операнда

-

-

+

+

-

-

+

+

Использование префикса размера адреса

-

+

-

+

-

+

-

+

Размер операнда, бит

16

16

32

32

32

32

16

16

Размер адреса, бит

16

32

16

32

32

16

32

16

Заметим, что в R и V режиме дескрипторы не определены и, в этих случаях, процессор автоматически полагает, что бит D=0. Т.е. размеры операндов и адресов по умолчанию принимаются равным 16 битам. Однако, и в R и в V-режиме разрешаются операции с 32 разрядными операндами, для чего необходимо использовать соответствующие префиксы.

2. Формат и кодирование команды.

На рис. П.2.1 приведен полный формат команды, используемый в процессорах семейства iAPX86.

Поле префиксов команды Основное поле команды

Префикс повторе-ния или блокиро-вания

Префикс переопре-деления разрядно-сти адреса

Префикс переопре-деления разрядно-

сти операндов

Префикс переопре-деления сегмента

Код опера-

ции (КОП)

Mod

R/M

SIB

Относитель-ный адрес (смещение

в команде)

Непосред-ственные данные (операнд)

0 или 1 байт

0 или 1 байт

0 или 1 байт

0 или 1 байт

1 или 2 байта

0 или 1 байт

0 или 1 байт

0,1,2 или 4 байта

0,1,2 или 4 байта

Рис. П.2.1. Формат команды процессоров i386+

Из всех полей команды обязательными являются только один или два байта кода операции.

Назначение и коды префиксов переопределения размеров адреса и данных, а также префиксов повторения, блокировки и перекрытия сегментов, представлены в табл. П.2.1.

Таблица П.2.2

Кодирование префиксов команд в процессорах семейства iAPX86

№ п/п

Наименование и назначение префикса

Код префикса

1.

Префикс повторения REP

F3h

2.

Префикс повторения REPE/REPZ (синоним REP)

F3h

3.

Префикс повторения REPNE/REPNZ

F2E

4.

Префикс блокировки LOCK

F0h

5.

Префикс переопределения сегмента на CS

2Fh

6.

Префикс переопределения сегмента на SS

36h

7.

Префикс переопределения сегмента на DS

3Eh

8.

Префикс переопределения сегмента на ES

26h

9.

Префикс переопределения сегмента на FS

64h

10.

Префикс переопределения сегмента на GS

65h

11.

Переопределение разрядности операнда

66h

12.

Переопределение разрядности адреса

67h

Заметим, что в R- и V-режимах процессоров i386+, как и в базовом процессоре i8086 не используются префиксы переопределения разрядности операндов, а также префиксы переопределения сегмента на FS и GS из-за отсутствия таковых.

При этом кодирование сегментных регистров приведено в табл. П.2.3.

Использование и возможности переопределения сегментных регистров сведены в табл. П.2.4.

Таблица П.2.3

Кодирование сегментных регистров в процессорах семейства iAPX

Тип сегментного регистра

Код сегментного регистра при R- и V-режимах работы процессора

Код сегментного регистра при Р-режиме работы процессора

ES

00

000

CS

01

001

SS

10

010

DS

11

011

FS

--

100

GS

--

101

Таблица П.2.4

Возможности переопределения сегментных регистров

Тип обращения к памяти

Базовый адрес сегмента

Сегментное смещение

По умолчанию

Возможность переопределения

Выборка команды

CS

Нет

IP(EIP)

Обращение к стеку

SS

Нет

SP(ESP)

Адресация операнда

DS

CS, SS, ES, FS, GS

EA

Адресация операнда с использованием BP(EBP) или SP(ESP) как базового регистра

SS

CS, DS, ES, FS, GS

EA

Адресация элемента цепочки-источника

DS

CS, SS, ES, FS, GS

SI(ESI)

Адресация элемента цепочки-получателя (приемника)

ES

Нет

DI(EDI)

Формат байта “mod R/M” в формате команды приведены на рис. П.2.2

7 6 5 4 3 2 1 0

mod

reg/op

reg/mem

Указание на регистровую адресацию, или код типа смещения DISP при вычислении эффективного адреса.

Код регистра, определяющего месторасположение первого операнда или расширение кода

операции

Код регистра или способ вычисления эффективного адреса ЕА (при mode # 11). Определяет месторасполо- жение второго операнда совместно с байтом SIB (если он присутствует)

Рис. П.2.2 Формат байта “mod R/M” кода команды.

Кодирование поля “mode” в байте “mod R/M” кода команды приведено в табл. П.2.5.

Таблица П.2.5

Кодирование поля mode

Код

Функциональное значение кода

00

DISP = 0

01

DISP = знак disp 8

10

DISP = disp 16

11

Признак регистровой адресации

где disp 8, disp 16 – восьмиразрядное и шестнадцатиразрядное смещение в команде. Кодирование поля “reg” в байте “mod R/M” кода команды приведено в табл. П.2.6.

Таблица П.2.6

Кодирование поля reg

Поле

reg

Поля W в команде нет

Поле W в команде имеется

16-битовый операнд

32-битовый операнд

16-битовый операнд

32-битовый операнд

W = 0

W = 1

W = 0

W = 1

000

AX

EAX

AL

AX

AL

EAX

001

CX

ECX

CL

CX

CL

ECX

010

DX

EDX

DL

DX

DL

EDX

011

BX

EBX

BL

BX

BL

EBX

100

SP

ESP

AH

SP

AH

ESP

101

BP

EBP

CH

BP

CH

EBP

110

SI

ESI

DH

SI

DH

ESI

111

DI

EDI

BH

DI

BH

EDI

Признаком размерности операнда в коде команды служит состояние младшего (нулевого) бита D0 (бита W) в поле байта кода операции (КОП) команды. При W = 0 используются 8 разрядные операнды, а при W = 1 – 32 разрядные.

То есть, если бит W = 0, то операндом является 8-ми битовый код, который берется из AL, BL и т.д. Если же бит W = 1, то операнд берется в зависимости от того, каким он установлен битом D дескриптора и префиксами переопределения размеров операндов, либо из AX, BX и т.д. (при 16 разрядных операндах) либо из EAX, EBX и т.д. (при установлении 32 разрядных операндов).

Состояние второго справа бита (d) в поле байта кода операции (КОП) команды, определяет направление передачи данных в двухоперандных командах. При d = 0 происходит передача данных из регистра (reg) в регистр/память (reg/mem), а при d = 1 происходит передача данных из регистра/памяти (reg/mem) в регистр (reg). В командах сдвига и вращения, бит D1 КОП (бит d) определяет сдвиг на 1 разряд (V = 0) или на число разрядов, указанных в CL.

Формирование эффективного адреса памяти второго операнда, осуществляемое при поле mode 11, вычисляется при 16 битовой адресации (при R-режиме процессоров i386+) в соответствии с табл. П.2.7. При 32 битовой адресации (в Р-режиме процессоров i386+) – в соответствии с табл. П.2.7 (при поле r/m 100), и табл. П.2.8 (при поле r/m = 100).

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

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

EBX + 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 этого байта.

Таблица П.2.9

Формирование эффективного адреса памяти ЕА при 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

Отметим также, что при 16 битовой адресации (R-режима) используются только регистры BX, SI, DI и BP (в стековых ситуациях неявно привлекается регистр SP). При 32 битовой адресации (Р-режиме) для адресации можно использовать любой регистр общего назначения и, кроме того, может быть задействован байт SIB (Scale, Index, Base – масштаб, индекс, база), формат которого приведен на рис. П.2.3, а кодирование – в табл. П.2.10.

7 6 5 4 3 2 1 0

SS

Index

Base

Рис.П.2.3. Формат байта SIB при 32 битовой адресации.

SS - масштабный множитель (коэффициент) для режима масштабирования индексной адресации.

Index - код регистра общего назначения, используемый как индексный регистр.

Base - код регистра общего назначения, используемого как базовый регистр.

Таблица П.2.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; в противном случае эффективный адрес не определен.

Приложение П.3

СИСТЕМА КОМАНД