Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Оргазм_шпоры.docx
Скачиваний:
22
Добавлен:
07.07.2019
Размер:
1.08 Mб
Скачать
  1. Обобщенный формат команд x86

Базовый набор команд 32-разрядного интеловского процессора обеспечивает выполнение операций над операндами, которые находятся в регистре, памяти или непосредственно в команде. В набор входят безадресные, одно-, двух- и трехадресные команды. Процессор реализует следующие шесть типов двухадресных команд: регистр – регистр; память – регистр; непосредственный операнд – регистр; регистр – память; память – память; непосредственный операнд – память. Операнды могут содержать 8, 16 или 32 разряда. Обобщенный вид формата команды допускает наличие следующих полей: кода операции (1 или 2 байта); байтов адресации (0, 1 или 2 байта); байтов смещения (0, 1, 2 или 4 байта); байтов непосредственных данных — операндов (0, 1, 2 или 4 байта). Команды содержат от 1 до 12 байт. Код операции (КОП) определяет тип выполняемой операции, а также в некоторых командах в первом байте может содержаться бит W, задающий разрядность операндов: W = 0 — операция с байтами; W = 1 — операция со словами (16 или 32 разряда).

 КОП

Байты адресации

Смещение

Операнд

MOD R/M

SIB

1 или 2 байта

0 или 1 байт

0 или 1 байт

0, 1, 2 или 4 байта

0, 1, 2 или 4 байта

Общий формат команд

В ряде команд первый байт КОП содержит поля reg или sreg, определяющие адрес используемых регистров. Трехбитовое поле reg задает выбираемый регистр в соответствии с разрядностью обрабатываемых операндов. Поле sreg (двух или трехбитовое) определяет адрес сегментных регистров.

Байт адресации MОD R/M содержит три поля. Поля MОD и R/M задают адрес одного из операндов, который может храниться в регистре или ячейке памяти. Кодировка этих полей определяет выбираемый способ адресации.

 7          6

5              3

2        0

 

7     6

5           3

2        0

MOD

REG/КОП

R/M

 

SS

INDEX

BASE

                  MOD/RM

 

 

                    SIB

 

Форматы байтов MOD R/M и SIB

В одноадресных командах поле REG/КОП содержит дополнительные биты кода операции. В двухадресных командах поле REG содержит адрес регистра, в котором хранится второй из операндов. Тип команды (одно- или двухадресная) определяется первым битом КОП. Поле MOD указывает, какой разрядности смещение используется для формирования адреса. Если оно имеет значение 00 (при некоторых значениях R/M) или 01, 10, то используется 8-, 16- или 32-разрядное смещение. Это смещение задается соответствующими байтами в коде команды, которые располагаются после байтов адресации.

Для реализации некоторых способов относительной адресации используется байт SIB. Он содержит 3-битовые поля INDEX и BASE, определяющие выбор регистров, используемых в качестве индексного и базового регистров, и поле SS, задающее масштабный коэффициент для модификации значения индекса.

При выполнении операций с непосредственной адресацией один из операндов задается в последних байтах  команды (рис. 2.20). В этом случае КОП ряда команд содержит бит S, определяющий способ использования непосредственно задаваемых данных.