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

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

- подлежащую выполнению операцию;

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

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

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

 

 

Рисунок 2.24 – Структура машинной команды

 

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

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

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

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

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

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

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

Длина команды – это важнейшее обстоятельство, влияющее на организацию и емкость памяти, структуру шин, сложность и быстродействие ЦП. С одной стороны, удобно иметь в распоряжении мощный набор команд, то есть как можно больше кодов операций, операндов, способов адресации, и максимальное адресное пространство. Однако все это требует выделения большего количества разрядов под каждое поле команды, что приводит к увеличению ее длины. Вместе с тем, для ускорения выборки из памяти желательно, чтобы команда была как можно короче, а ее длина была равна или кратна ширине шины данных. Для упрощения аппаратуры и повышения быстродействия ЭВМ длину команды обычно выбирают кратной байту, поскольку в большинстве ЭВМ основная память организована в виде 8-битовых ячеек.

В рамках системы команд одной ЭВМ могут использоваться разные форматы команд. Обычно это связано с применением различных способов адресации. В таком случае операционная часть команды содержит поле кода операции (КОп) и поле для задания способа адресации (СА).

Общая длина команды RK может быть определена следующим соотношением:

,

где l – количество адресов в команде; RAi – количество разрядов для записи i-го адреса; RКОп – разрядность поля кода операции; RСА – разрядность поля способа адресации.

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

 

RКОп = int(log2(NКОп)),

 

где int означает округление в большую сторону до целого числа.

При заданной длине кода команды приходится искать компромисс между разрядностью поля кода операции и адресного поля. Большее количество возможных операций предполагает длинное поле кода операции, что ведет к сокращению адресного поля, то есть к сужению адресного пространства. Для устранения этого противоречия иногда длину поля кода операции варьируют. Изначально под код операции отводится некое фиксированное число разрядов, однако для отдельных команд это поле расширяется за счет нескольких битов, отнимаемых у адресного поля.

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

Разрядности полей и рассчитываются по формулам:

 

RAi = int(log2(Ni)), RCA = int(log2(NCA)),

 

где Ni, – количество ячеек памяти, к которому можно обратиться с помощью i-ro адреса; NСА – количество способов адресации.

Для определения количества адресов, включаемых в адресную часть, будем использовать термин адресность. В «максимальном» варианте необходимо указать три компонента: адрес первого операнда, адрес второго операнда и адрес ячейки, куда заносится результат операции. В принципе может быть добавлен еще один адрес, указывающий место хранения следующей инструкции. В итоге имеет место четырехадресный формат команды. Такой формат представлен на рисунке 2.25.

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

К сожалению, и в трехадресном формате длина команды может оказаться весьма большой. Так, если адрес ячейки основной памяти имеет длину 32 бита, а длина кода операции – 8 бит, тодлина команды составит 104 бита (13 байт).

 

 

Рисунок 2.25 – Четырехадресный формат команды

 

Если по умолчанию взять в качестве адреса результата адрес одного из операндов (обычно второго), то можно обойтись без третьего адреса, и в итоге получаем двухадресный формат команды. Естественно, что в этом случае соответствующий операнд после выполнения операции теряется.

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

Применение единственного регистра для хранения одного из операндов и результата является ограничивающим фактором, поэтому помимо аккумулятора часто используют и другие регистры ЦП. Так как число регистров к ЦП невелико, для указания одного из них в команде достаточно иметь сравнительно короткое адресное поле. Соответствующий формат носит название полутораадресного или регистрового формата.

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

При выборе количества адресов в адресной части команды обычно руководствуются следующими критериями:

- емкостью запоминающего устройства, требуемой для хранения программы;

- временем выполнения программы;

- эффективностью использования ячеек памяти при хранении программы.

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

- выборки команды;

- выборки первого операнда;

- выборки второго операнда;

Одноадресная команда требует двух обращений к памяти:

- выборки команды;

- выборки операнда.

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