Форматы команд: Атрибуты (признаки) размера операнда и размера адреса

Печать
Программирование - Архитектура и система команд микропроцессоров x86

 

Во время выполнения команды процессор может обращаться к памяти, используя 16- или 32-разрядную адресацию. Каждая команда, выполняющая обращение к памяти ассоциируется с соответствующим атрибутом размера адреса. В 16-разрядном режиме подразумевается использование 16 бит смещения в команде и генерация 16-битного адресного смещения (относительный адрес в сегменте). В свою очередь 32-разрядная адресация подразумевает использование 32 бит смещения в команде и генерацию 32-битного адресного смещения.

Подобным образом, команда, которая в качестве операндов обращается к словам (16 бит) или двойным словам (32 бита), имеет, соответственно, 16 или 32-битный атрибут размера операнда.

Атрибуты размера операнда и размера адреса полностью определяются комбинацией значения атрибута по умолчанию, префиксом команды и (для команд работающих в защищенном режиме) битами спецификации размера (D и B) в дескрипторах сегментов.

Атрибуты размера операнда и размера адреса по умолчанию

Для программ, работающих в защищенном режиме, бит D в дескрипторах исполняемых кодовых сегментов определяет значение атрибута размера операнда и атрибута размерa адреса по умолчанию. Это значение атрибута применяется ко всем командам, выполняемым в сегменте. Если бит D сброшен, то значения размера операнда и размерa адреса по умолчанию устанавливаются равными 16 бит, а если бит D установлен — 32 бита.

Программы, выполняемые в режиме реальной адресации или в режиме V86, всегда имеют размеры операнда и адреса по умолчанию равными 16 бит.

Префиксы размера операнда и размера адреса

Внутренняя кодировка команды может включать в себя два однобайтных префикса: префикс размера операнда (67h), префикс размера адреса (66h). (Положение префиксов при кодировке команды описано в подразделе "Базовый формат команды".) Эти префиксы замещают значения атрибута размера операнда и атрибута размера адреса, принятые по умолчанию для команды следующей за префиксом. В таблице 5.1. показаны все возможные комбинации значений атрибутов по умолчанию и их замещения префиксами.

 

Таблица 5.1. Эффект от применения префиксов размера операнда и размера адреса



Сегмент по умолчанию (D = )

0

0

0

0

1

1

1

1

Префикс размера операнда 66h

-

-

+

+

-

-

+

+

Префикс размера адреса 67h

-

+

-

+

-

+

-

+

Эффективный размер операнда

16

16

32

32

32

32

16

16

Эффективный размер адреса

16

32

16

32

32

16

32

16

Атрибут размера адреса для стека

Команды, которые используют стек неявно (например: pop eax), также имеют атрибут размера адреса стека 16 или 32 бит. Команды с 16-битным атрибутом размера адреса стека используют 16-битный регистр указателя стека (SP). Команды с 32-битным атрибутом размера адреса стека используют 32-битный регистр указателя стека (ESP).

Атрибут размера адреса стека управляется битом B дескриптора сегмента данных регистра SS. Нулевое значение бита B, задает 16-битный атрибут размера адреса стека, единичное значение — 32-битный.