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

Страницы работы

Содержание работы

ПРИЛОЖЕНИЯ

П.1. ФОРМАТ КОМАНД МП Х86

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

в процессорах семейства iAPX86

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

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

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

                                                                                 Таблица П.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.  Формат и кодирование команды.

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

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

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

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

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

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

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

Код опера-

ции (COP)

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 байта

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

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

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

                                                                                       Таблица П.2

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

№ п/п

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

Код префикса

1.

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

F3h

2.

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

F3h

3.

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

F2h

4.

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

F0h

5.

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

2Fh

6.

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

36h

7.

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

3Eh

8.

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

26h

9.

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

64h

10.

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

65h

11.

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

66h

12.

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

67h

                                                                                Таблица П.3

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

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

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

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

ES

00

000

CS

01

001

SS

10

010

DS

11

011

FS

-

100

GS

-

101

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

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

Использование и возможности переопределения сегментных регистров сведены в табл.П.4.  Отметим, при этом, что регистры  FS и GS не принимаются по умолчанию ни в одной команде.     

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

Заметим, что при программировании на языке Ассемблера, префиксы безусловного и условного повторения REP (REPZ, REPNZ и др.), используемые при обработке цепочечных команд, и префикс блокировки LOCK устанавливаются перед соответствующей командой. Префиксы замены сегмента, отменяющие выбор сегмента по умолчанию, устанавливаются в команде перед эффективным адресом, разделяемые двоеточием (CS:EA). Префиксы переопределения разрядности адресов и операндов определяются директивами языка.

Похожие материалы

Информация о работе