ПРИЛОЖЕНИЯ
П.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). Префиксы переопределения разрядности адресов и операндов определяются директивами языка.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.