Структура машинной команды. Префикс замены сегмента в памяти.


 

Машинная команда должна содержать следующую информацию:

1) код операции, который помещается в первом байте команды.

2) способ адресации и собственно адрес. В команде должно быть закодировано: содержаться ли операнды в регистрах, или это непосредственные данные, или операнд находится в памяти.

Форматы команд ЦП в языке ассемблера строится в соответствие с двоичной внутренней машинной формой представления, по которой обобщенный формат использует базовую 2х байтную структуру для построения основной части команды, имеющей вид.

15 8 7 0
000000 d/o w mod reg/000 r/m d8 / d16 / d32 i8 / i16 / i32
Кодируется КОП и способ адр-ии Пост-байт Размер данных  

Размер данных и количество следующих байтов команды определяются конкретным кодом операции и наличием в команде фиксированных байтов, префиксов, разрядностей данных и адресаций.

Буквами 0 обозначены байты КОП.

d - направление пересылки результатов

w – размер данных: 0 – байт; 1 – слово / двойное слово

mod – модификация операндов

r/m – регистр или указатель типа операнда

reg/000 – могут продолжаться биты КОП

В машинной форме после основной части команды с указателями модификации адресов памяти может рассматриваться 2х байтный адрес для прямой адресации, однобайтное или 2х байтное смешение, одно или 2х байтные непосредственные данные, 2х байтные смещения и 2х байтный сегментный адрес для прямой межсегментной адресации.

Длина команды ЦП без префиксов может достичь 6 байт. Некоторые группы команд имеют дополнительные сокращенные форматы, которые обрабатываются быстрее.

Если на код операции и режим адресации выделено 2 байта, то поля mod и r/m а также бит w определяют разные режимы адресации и назначение сегментных регистров по умолчанию.

Второй байт, используемый для адресации почти всех операндов называется пост-байтом.

Mod и r/m используются совместно. Дают 32 комбинации. 8 регистров и 24 режима адресации.

Reg/000 это регистры во втором операнде и код операции.

Примеры:

1) команда mov Si,BX

расширяем побитно структуру команды

D W Mod Reg r/m
КОП   Длина операнда Работа с регистрами   BX

2) mov DS,DX используется сегментный регистр

 

Mod Reg r/m
Коп Работа с 2мя регистрами    

 

3) пересылка непосредственных данных в регистр

mov AH,9h

КОП W AH  

 

Комплекс префиксов и суффиксов обеспечивает выбор режимов выполнения команд. Команды могут использовать следующие группы префиксов, систематизированных по семантическим признакам:

1) Задаваемые в виде предварительной операции

LOCK-префикс для блокировки шины данных (0F0h)

REP[xx]-префиксы повторения команд обработки строк

2) Задаваемые явно в операнда префиксами задания сегментов

DS:,CS:,SS:,ES:. Или неявно через директиву управления доступом к сегментам памяти через директиву ASSUME.

3) префикс определяется режимом трансляции и форматом операнда

префикс 32-х разрядного адреса

префикс 32-х разрядных данных

4) префикс замены сегментов в памяти. При переназначении сегм. Регистра процессор создает байт следующего вида:001RG110

Если режим адресации использует регистр BP для формирования физического адреса, по умолчанию используется содержимое сегментного регистра SS, а в других режимах адресации – содержимое регистра DS.

Если в команде используется префикс замены сегмента, то длина основной команды увеличивается на 1 байт префикса переключения сегментов, а время выполнения – на 2 цикла.

Аналогичная замена невозможна, при вычислении адреса текущей команды. В этом случае всегда используется регистр CS.

При выполнении основных манипуляций чтения и записи со стеком с использованием регистра SP всегда подключается сегментный регистр ES.

Программист может использовать сегментный префикс и переназначать сегментное назначение. При переназначении сегментного регистра процессор создает байт 001RG110.

Транслятор при построении объектного кода также встраивает сегментные префиксы в команды в случае необходимости.