Формат команд

Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение некоторой операции. Правила кодирования команд называются форматом команд. Команды процессоров архитектуры IA-32 считаются сложными. Максимальная длина машинной команды IA-32 составляет 15 байт. Реальная команда может содержать гораздо меньшее количество полей, вплоть до одного – только код операции.

Типовая команда, в общем случае, должна указывать:

1) код подлежащей выполнению операции;

2) адреса исходных данных (операндов), над которыми выполняется операция;

3) адрес, по которому должен быть помещен результат операции.

В соответствии с этим команда состоит из двух частей: операционной и адресной:

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

1) общее число различных команд;

2) общую длину команды;

3) тип полей команды (фиксированной или переменной длины) и их длина;

4) простоту декодирования;

5) адресуемость и способы адресации;

6) стоимость оборудования для декодирования и исполнения команд.

Приведенный на рис. 4.1 формат машинной команды является наиболее полным.

Как на уровне формата машинной команды соответствуют между собой машинные команды и команды ассемблера? Для примера рассмотрим типичную команду языка ассемблера:

mov ebx , eax

Команда MOV производит копирование содержимого регистра ЕАХ в регистр ЕВХ.

Соответствующая машинная команда будет выглядеть так:

8B D8

Значение 8В – код операции. Еще один пример команды MOV:

mov ecx , 128

Данная команда инициализирует содержимое регистра ЕСХ десятичным значением 128. Соответствующая машинная команда выглядит так:

B9 00000080

Значение поля с кодом операции – В9. Из примеров видно, что прямого соответствия между структурой команды ассемблера и соответствующей машинной командой нет. Несмотря на то, что команда ассемблера одна и та же (MOV), коды машинных команд – разные (8В и В9). Большинство команд ассемблера имеют несколько возможных вариантов сочетания операндов. Как показано в приведенных примерах, несмотря на одинаковые названия команд ассемблера, для каждого возможного сочетания операндов имеется своя машинная команда, со своим значением поля кода операции (рис. 4.1). Это говорит о том, что машинная команда всегда однозначна по отношению к производимым ею действиям на уровне аппаратуры. Несколько упрощая реальность, можно утверждать, что значение в поле кода операции является номером микропрограммы в блоке микропрограммного управления для каждой конкретной команды ассемблера с каждым конкретным вариантом сочетания операндов.

Рис. 4.1. Формат машинной команды.

 

Логически любая команда языка ассемблера содержит несколько элементов.

Элемент, описывающий, что делать, называется кодом операции (КОП). Значение в поле кода операции некоторым образом определяет в блоке микропрограммного управления подпрограмму, реализующую действия для данной команды.

Элементы, описывающие объекты, с которыми нужно что-то делать, являются операндами. Операнды в команде могут и не задаваться, а подразумеваться по умолчанию.

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

Эти же элементы имеет и машинная команда, но в закодированном виде. Перевод команд ассемблера в соответствующие машинные команды осуществляет специальная программа – ассемблер, которую можно также назвать транслятором (компилятором) ассемблера.