![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Команда в защищенном режиме (рис. 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+esi*8],
· базовая индексная со смещением MOV еах, [еbp+esi*8+1Ah],
Предусмотрены два способа задания смещения операнда в таблицах.
1. Для обращения к элементам таблицы (спискам) последовательно по смежным адресам; устанавливается значением поля r/m ¹ 100впостбайте,
2. Для обращения к элементам таблицы в произвольном порядке их адресов; устанавливается значением поля r/m = 100впостбайте при разрядности по адресу в 32 бита.
Постбайт
Это необязательный элемент команды. Задает один (для одноадресной команды) или два адреса операндов, один из которых используется и как адрес результата.
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 | ||
DS:[еах] ] | DS:[еах+disp ( 1 байт)] ] | DS:[еах+disp (4 байт)] ] | |
DS:[еcх] | DS:[еcх+disp (1 байт)] | DS:[еcх+disp (4байт)] | |
SS:[еdх] | SS:[еdх+disp (1 байт)] ] | SS:[еdх+disp (4 байт)] ] | |
SS:[еbх] | SS:[еbх+disp (1 байт)] ] | SS:[еbх+disp (4 байт)] ] | |
SIB | SIB | SIB | |
DS:disp(4 байт). | SS:[ebp+disp (1 байт)] | SS:[ebp+disp (4 байт)] | |
DS:[еsх] ] | DS:[еsх+disp (1 байт)]] ] | DS:[еsх+disp (4 байт)]] ] | |
DS:[еdх] | DS:[еdх+disp (1 байт)]] | DS:[еdх+disp (4 байт)]] |
Дата публикования: 2014-11-03; Прочитано: 496 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!