Структура машинной команды. Префикс замены сегмента в памяти.
Машинная команда должна содержать следующую информацию:
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.
Транслятор при построении объектного кода также встраивает сегментные префиксы в команды в случае необходимости.
Дата добавления: 2015-07-30; просмотров: 1285;