Форматы команд: Атрибуты (признаки) размера операнда и размера адреса |
Программирование - Архитектура и система команд микропроцессоров 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. Эффект от применения префиксов размера операнда и размера адреса
Атрибут размера адреса для стекаКоманды, которые используют стек неявно (например: pop eax), также имеют атрибут размера адреса стека 16 или 32 бит. Команды с 16-битным атрибутом размера адреса стека используют 16-битный регистр указателя стека (SP). Команды с 32-битным атрибутом размера адреса стека используют 32-битный регистр указателя стека (ESP). Атрибут размера адреса стека управляется битом B дескриптора сегмента данных регистра SS. Нулевое значение бита B, задает 16-битный атрибут размера адреса стека, единичное значение — 32-битный.
|
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru