'

Формат команды процессора Intel с архитектурой IA-32

Понравилась презентация – покажи это...





Слайд 0

Формат команды процессора Intel с архитектурой IA-32


Слайд 1

Общие сведения о формате команды Префиксы (0-5 байт) Блокировки Замены сегмента Замены длины операнда и длины адреса Повторений Код команды (1-2 байта) Может включать в себя специальные поля регистра, размера операнда, размера непосредственного значения, направления выполнения команды, кода условия Mod R/M (0-1) байт Определяет способ адресации нерегистрового операнда, регистр или дополнительный код операции


Слайд 2

Общие сведения о формате команды SIB – Scale-Index-Base Дополнительное поле для адресации в 32-х разрядном режиме. Хранит коэффициент масштаба, номера индексного и базового регистров Непосредственное значение (0-4 байта) Смещение (0-4 байта). В командах дальних переходов хранится 2 поля – смещение и селектор сегмента


Слайд 3

Префиксы


Слайд 4

Префиксы


Слайд 5

Пример формирования префикса повторения


Слайд 6

Префиксы


Слайд 7

Пример формирования префикса замены сегмента


Слайд 8

Префиксы


Слайд 9

Пример формирования префикса OS


Слайд 10

Пример формирования префикса AS


Слайд 11

Поля кода операции


Слайд 12

Поля кода операции


Слайд 13

Коды регистров


Слайд 14

Коды условий


Слайд 15

Формирование поля reg


Слайд 16

Формирование поля w


Слайд 17

Формирование поля s


Слайд 18

Формирование поля d


Слайд 19

Формирование поля d MOV x, dx MOV dx, x


Слайд 20

Поле кода условий в командах условного перехода


Слайд 21

Поле MOD R/M


Слайд 22

Значение поля mod


Слайд 23

Значение поля R/O Продолжение кода операции Номер регистра


Слайд 24

Значение поля R/M


Слайд 25

Примеры формирования Mod R/M CMP EDX, [EBX] MOV AX, ARR[BX]


Слайд 26

Поле SIB


Слайд 27

Значение поля S (Scale)


Слайд 28

Значение полей I (Index) и B (Base)


Слайд 29

Формирование поля SIB ADD EAX,[ESP]


Слайд 30

Непосредственное значение необязательное поле команды, которое может занимать 0, 1, 2 или 4 байта. Размер непосредственного операнда определен несколькими факторами: разрядностью программного сегмента; наличием в команде префикса OS = 66h; значением бита s, который позволяет сохранять в тексте программы только младший байт 16-ти или 32-х битного непосредственного операнда, если его значение попадает в диапазон для короткого целого числа со знаком


Слайд 31

Смещение Если в команде используется смещение, то поле mod должно принимать значения 01 или 10. В случае, если mod = 01 используется 8-ми битное смещение, а при mod = 10 – 16-ти или 32-х разрядное смещение. Если в команде используется прямая адресация, то требуется, чтобы поле mod = 00, а поле R/M принимало значение 110 для указания 16-ти разрядного смещения в 16-ти разрядных сегментах, и 101 – для 32-х разрядного смещения в 32-х разрядных сегментах. Использование 32-х или 16-ти разрядного смещения зависит от разрядности сегмента и наличия префикса AS = 67h. В случае, когда разрядность сегмента кода не совпадает с разрядностью сегмента данных, команда обязательно формируется с преaиксом AS, а разрядность смещения устанавливается по разрядности сегмента кода. При использовании индексной адресации через 32-х разрядные регистры без указания регистра базы обязательно формируется 32-х разрядное смещение, даже если оно не было указано. При адресации через 32-х разрядные регистры с использованием регистра базы размер смещения может быть оптимизирован (хранится в виде одного байта), если его значение находится в диапазоне -128..+127.


×

HTML:





Ссылка: