Машинная кодировка команд IA – 16.
МП IA-16 используют команды переменного формата от 1 до 7 байт. Кодировка команд производилась с учетом частоты использования команды в типовых программах.
Команда может иметь (рис. 2.5.):
· возможно, префикс (1 или 2 однобайтных префиксов),
· код адресации (1 байт),
· возможно, постбайт (1байт),
· возможно, байты смещения – disp (1 или 2 байта),
· возможно, байты непосредственного операнда (1 или 2 байта).
0, 1 или 2 байта | 1 байт | 0,1 байт | 0,1 или 2 байта | 0,1 или 2 байта |
префикс | код операции | постбайт | байты смещения | непосредственный операнд |
Рис.2.5. Структура команд МП IA -16. |
Элементы команды:
Префикс.
Это необязательный байт, модифицирующий процедуру выполнения команды.
МП IA – 16 предусматривает использование двух префиксов:
· повторения,
· замены сегмента памяти, используемого по умолчанию (только для данной команды).
Префикс повторения. ВМП IA – 16 для обработки строк данных используются обычные команды, но с использованием префикса повторения. Префикс повторения обеспечивает повторные действия над элементами строк данных. Предусмотрены два варианта префикса повторения, отличающиеся заданием конца повторений: количеством повторений:
1. подсчетом заданного числа повторения (в регистре cx),
2. кодом условия результата очередного повторения операции в регистре флагов.
Префикс замены сегмента памяти.
В МП IA-16 предусмотрены 4 сегментных регистра. Использование любого из них может быть задано по умолчанию или явно, кроме сегмента команд.
По умолчанию используются сегменты:
· CS – для выборки команд по IP (счетчику команд),
· DS – для выборки данных, адреса которых используют базу – bx,
· SS – для выборки данных, адреса которых используют базу – bp,
· ES – в командах обработки строк.
Изменения использования сегмента по умолчанию можно указав в команде явно используемый сегмент:
1. mov ax, [CS:bх +356] база bх указывает на использование сегмента данных DS, но запись CS:bхявно указывает на работу с данными, помещенными в кодовый сегмент.
2. mov ax, ma [bх +356] в этом варианте используется константа, зарезервированная псевдооператорами ассемблера DB (определить байт) или DW (определить слово):
Cegment CSзадание сегмента,
DW ma 45 зарезервировать двухбайтную ячейку для данных ma с начальным значением 45.