Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник ОЭВМ Трусфус.doc
Скачиваний:
126
Добавлен:
12.03.2015
Размер:
4.82 Mб
Скачать

3.3.4. Структура команд и режимы адресации

Команды архитектуры МП IA-32 могут определять до трех операндов. При этом один из операндов задается непосредственным значением (#d), второй операнд – номером РОНа или адресом памяти, а адрес результата – номером РОНа. Это трехместная команда типа #d, r/M, r с явным заданием двух операндов и адреса результата.

Пример: команда IMUL – умножение целых со знаком.

Большинство команд архитектуры IA-32 используют только два адреса. Они образуют пять основных групп команд:

  • регистр-регистр (r/r),

  • регистр-память (r/m),

  • память-регистр (m/r),

  • непосредственный операнд-регистр (#d/r),

  • непосредственный операнд-память (#d/m).

Исключением является команда MOVS – команда строковой передачи данных типа память–память (адреса ячеек памяти задаются содержимым пар регистров базы/индекс) и команды работы со стеком, которые перемещают данные из памяти в стек, который также находится в памяти. Эта команды типа память–память, но в них явно задается только один адрес памяти в форме непосредственного операнда (#d).

Структура команды

Команда в защищенном режиме (рис. 3.17) может содержать от 1 до 17 байт:

0, 1,2,3,4

или 5 байта

1 байт

0 или1 байт

0 или1 байт

0,1,2 или 4

байта

0,1,2

или 4 байта

префикс

код

операции

постбайт

SIB - байт

байты

смещения

байты

операнда

Рис.3.17. Структура команд МП IA -32.

1. Префиксы (0,1,2,3 или 4 байт):

  • префикс блокировки шины реализует блокировку шин к общим ресурсам.

  • префикс замены сегмента в явной форме указывает сегментный регистр, используемый программой,

  • префикс переключения разрядности адреса изменяет принятую по умолчанию разрядность адреса на альтернативную (с 2-х байт на 4 или наоборот),

  • префикс размера операнда изменяет разрядность операнда, принятую по умолчанию.

  • префикс повторения используется с командами обработки строк, задает условие окончания операции.

2. Код операции (1или 2 байта) – задает операцию.

3. Постбайт (0 или 1 байт) – если присутствует, задает тип команды (регистр/регистр или регистр/память), а также определяет режим адресации памяти для команды типа регистр/память.

4. Байт SIB (scale-index-base – масштаб-индекс-база) – может отсутствовать; если присутствует – является дополнением к постбайту, модифицирующим процедуру базово-индексной адресации; присутствие байта SIB определяется полем постбайта r/m =100.

5. Смещение – компонента адреса; задает смещение, размер которого (1, 2. или 4 байта). Смещение может отсутствовать, его присутствие определяется постбайтом.

6. Непосредственный операнд – определяется кодом операции, если присутствует, то используется в качестве одно, двух или четырехбайтного операнда.

Режим адресации операндов

Режим адресации операндов в команде определяется кодом операции, постбайтом и байтом SIB. Режим адресации определяет местонахождение компонентов операндов и алгоритм вычисления адреса операнда в памяти.

В защищенном режиме МП IA–32 используются следующие виды адресаций:

  • непосредственная (константа) MOV еax, 0002h,

  • прямая (#d – смещение) MOV еbx, [0002h],

  • регистровая (любой РОН, кроме ebp) MOV еbx, еах,

  • косвенная регистровая MOV еах, [еbx],

  • базовая со смещением MOV еах, [еbx+001Ah],

  • базовая индексная без смещения MOV еах, [еbp+esi8],

  • базовая индексная со смещением MOV еах, [еbp+esi8+1Ah],

Предусмотрены два способа задания смещения операнда в таблицах.

  1. Для обращения к элементам таблицы (спискам) последовательно по смежным адресам; устанавливается значением поля r/m100 в постбайте,

  2. Для обращения к элементам таблицы в произвольном порядке их адресов; устанавливается значением поля r/m= 100 в постбайте при разрядности по адресу в 32 бита.

Постбайт

Это необязательный элемент команды. Задает один (для одноадресной команды) или два адреса операндов, один из которых используется и как адрес результата.

7

6

5

3

2

0

md

r/r

r/m

Рис. 3.18. Структура постбайта

Постбайт (рис. 3.18), как и в МП IA-16, содержит 3 поля:

  • md– поле режима адресации,

  • r/r– поле адреса регистра,

  • r/m– поле адреса второго регистра или кода алгоритма вычисления адреса памяти.

Поле md

Это поле режима адресации, задающее тип команды: регистр/регистр (r/r) или регистр/память (r/m).

Для команд регистр/память задает процедуру вычисления адреса операнда в памяти:

  • md=00 – режим адресацииr/mбез использования смещения,

  • md=01 – режим адресацииr/mс использованием смещения 1 байт,

  • md=10 – режим адресацииr/mс использованием смещения 2 или 4 байта в зависимости от установки разрядности данных для конкретной программы. Предусмотрена возможность изменения разрядности данных для отдельных команд с использованием префикса.

  • md=11 – режим адресацииr/r.

Задание md = 11 определяет команду типа регистр/регистр. В этом случае полеrсодержит номер РОНа, в котором находится один из операндов, а полеr/m, – номер РОНа, в котором находится второй операнд.

В 32-разрядном режиме адресации правила вычисления адресов операндов в сегменте (offset) определяются полемr/mпостбайта. Значения поляr/m, кроме значенияr/m= 100, задают формулы вычисления адреса второго операнда по двум компонентам: базы (B) и смещению (disp). Смещение, в зависимости от значения поляmdпостбайта и установки разрядности данных, может быть нулевым, однобайтным, двухбайтным или четырехбайтным.

Значение поля r/m = 100 задает новый способ задания адресов, упрощающий процедуру вычисления при обращении к таблицам по произвольным адресам. Этот способ использует дополнительный байтSIB.

Имеется исключение: при значении полей постбайта r/m = 101 иmd = 00 адрес операнда задается прямым адресом (4 байта) в поле смещения (см. табл. 2)

Таблица 2.Режимы адресации МП IA-32 без использования SIB-байта (r/m  100).

Поле

r/m

Поле md

00

01

10

000

DS:[еах]

]

DS:[еах+disp (1 байт)]

]

DS:[еах+disp (4 байт)]

]

001

DS:[еcх]

DS:[еcх+disp (1 байт)]

DS:[еcх+disp (4байт)]

010

SS:[еdх]

SS:[еdх+disp (1 байт)]

]

SS:[еdх+disp (4 байт)]

]

011

SS:[еbх]

SS:[еbх+disp (1 байт)]

]

SS:[еbх+disp (4 байт)]

]

100

SIB

SIB

SIB

101

DS:disp (4 байт).

SS:[ebp+disp (1 байт)]

SS:[ebp+disp (4 байт)]

110

DS:[еsх]

]

DS:[еsх+disp (1 байт)]]

]

DS:[еsх+disp (4 байт)]]

]

111

DS:[еdх]

DS:[еdх+disp (1 байт)]]

DS:[еdх+disp (4 байт)]]

Режимы адресации МП IA-32 с использованием SIB-байта

Режимы адресации МП IA-32 с использованиемSIB-байта (r/m= 100) означают, что следующий байт команды являетсяSIB-байтом, а адрес операнда в упорядоченном массиве данных (таблицах) памяти вычисляется по формуле:

(B) + 2S (I) + Disp,

где: B, I и S – поля байта SIB.

Режимы адресации с использованием SIB-байта представлены в табл. 3.

Таблица 3. Режимы адресации МП IA-32 с использованием SIB- байта(r/m = 100)

Поле r/m постбайта

Поле md

00

01

10

100

DS:eax + I2S

DS:eax + I 2S + disp (16 ) та)

DS:eax + I 2S + disp (32)

DS:ecx + I2S

DS:ecx + I2S + disp (16)

DS:ecx + I2S + disp (32)

DS:edx + I2S

DS:edx + I2S + disp (16)

DS:edx + I2S + disp (32)

DS:ebx + I2S

DS:ebx + I2S + disp (16)

DS:ebx + I2S + disp (32)

SS:esp + I2S

SS:esp + I2S + disp (16)

SS:esp + I2S + disp (32)

DS:disp (32 бита)

DS:ebp + I2S + disp (16)

DS:ebp + I2S + disp (32)

DS:esi + I2S

DS:esi + I2S + disp (16)

DS:esi + I2S + disp (32)

DS:edi + I2S

DS:edi + I2S + disp (16)

DS:edi + I2S + disp (32)

Примечание:

В качестве индексного регистра может быть указан любой РОН, кроме указателя стека (100).

Когда поле индекса содержит 100, указывающее, что индексный регистр не используется, поле SSдолжно содержать 00, иначе линейный адрес будет считаться неопределенным

Трансляция сегментов в защищенном режиме МП IA-32

Дескрипторы сегментов используются для процедур трансляции сегментов при каждом обращении к оперативной памяти.

Для решения этой проблемы процессор содержит шесть сегментных регистров. С каждым 16-битным сегментным регистром ассоциативно связаны по одному из шести программно-недоступных 64-битных регистров дескрипторов (рис. 3.12). Эти регистры предназначены для хранения шести дескрипторов сегментов после их активизации.

Активизация дескрипторов осуществляется командами загрузки сегментного регистра (кроме CS) или командами межсегментных передач управления (для активизации сегментов программ). При этом в дескрипторном регистре запоминается дескриптор, а в 16-битном регистре – адрес его расположения в таблице дескрипторов.

Схема трансляции сегментов

МП содержит 6 регистров сегментов. Это означает, что одновременно могут быть активными и участвовать в процедуре трансляции только 6 сегментов. Для загрузки сегментов данных, включая сегмент стека, имеются специальные команды "загрузить сегмент".

В работе механизма защиты при обращении к данным можно выделить два этапа:

  • загрузка (активизация) сегмента данных,

  • обращение к сегменту данных для чтения или записи операндов при выполнении команд программы (с использованием процедуры трансляции сегмента).

Загрузка сегментов данных (включая стековые) производится командами "Загрузка указателя в регистр смещения". Это команда типа регистр - память:

(LDS, LES, LFS, LGS, LSS) reg, mem.

Основные этапы выполнения команды:

    • чтение по адресу "mem";

    • прочитанные данные интерпретируются как селектор целевого сегмента и смещение (адрес в целевом сегменте),

    • сохранение выбранных значений в буферных регистрах,

    • обращение к таблице дескрипторов по выбранному целевому селектору,

  • сохранение значения дескриптора целевого сегмента в дескрипторный регистр, ассоциативно связанный с заданным сегментным регистром;

    • загрузка в РОН, указанный полем regкоманды, смещения, выбранного при чтении по адресу "mem". В дальнейшим этот адрес может использоваться в качестве базового для задания адресов компонентами.

Схема выполнения команды загрузки сегментного регистра (рис. 3.19).

Обобщенная схема вычисления линейного адреса в защищенном режиме представлена на рис. 3.20.

Результатом трансляции сегмента является линейный адрес. Это адрес линейной (плоской) памяти. Но он необязательно должен совпадать с адресом физической памяти. Все зависит от бита включения механизма подкачки страниц (трансляции страниц) в управляющем регистре СR3. Если он не включен, то линейный адрес является адресом обращения к физической памяти, иначе производится трансляция страниц для формирования физического адреса.

Вопросы для самопроверки:

  1. 5 групп двуместных команд.

  2. Структура команд МП IA-32 (побайтно).

  3. Префикс блокировки шины.

  4. Префикс блокировки замены сегмента.

  5. Префикс переключения разрядности адреса.

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

  7. Поля и назначение постбайта в МП IA-32.

  8. Поля и назначение SIB-байта в МП IA-32.

  9. Процедура активации сегментов в МП IA-32.

  10. Процедура трансляции сегментов в МП IA-32.

  11. Определите и расшифруйте коды поля md постбайта в МП IA-32.

  12. Определите и расшифруйте коды поля r/r постбайта в МП IA-32.

  13. Определите и расшифруйте коды поля r/m постбайта в МП IA-32.