[ Тематический план ] [ Кодирование команд] [ 1 ] [ 2 ]
Формат команды – это структура команды, позволяющая распознать назначение отдельных ее полей.
Исходя из определения, команда должна содержать информацию о выполняемой операции, адресах операндов и адресе ячейки ЗУ для записи результата. Этому в наибольшей степени соответствует формат команды, содержащий поле кода операции и три адресных поля. Такая система кодирования команд называется трехадресной ( рис.1,в ).
Схема выполнения трехадресной команды имеет вид:
(А 1 )*(А 2 )->А 3 .
Здесь (А 1 ) и (А 2 ) – адреса ячеек ЗУ, в которых хранятся первый и второй операнды соответственно; * – знак обобщенной операции (например, сложение или умножение), задаваемой полем кода операции (КОп). Знак " -> " обозначает передачу результата операции в ячейку памяти с адресом А3.

Рис. 1. Системы кодирования команд
Для выполнения операции сложения операндов, находящихся по адресам a и
b , с записью результата в ячейку c ( c = a + b ) требуется одна
команда такого формата:
| КОп | А 1 | А 2 | А 3 |
| ADD | a | b | c |
Здесь ADD – код операции сложения.
Формат двухадресной команды представлен на рис.1,б . Выполнение операции с помощью такой команды проходит по следующей схеме:
(А 1 ) * (А 2 ) -> А 1 или
(А 1 ) * (А 2 ) -> А 2
Выполнение того же самого действия c = a + b в двухадресной системе кодирования команд потребует уже двух команд, например:
| КОп | А 1 | А 2 | |
| ADD | a | b | a = a + b |
| MOV | c | a | c = a |

Схема выполнения операции на ЭВМ с одноадресной системой команд имеет вид:
(А) * (РР) -> А или
(А) * (РР) -> РР .
Операцию c = a + b в одноадресной системе команд можно выполнить следующим образом:
| КОп | А 1 | |
| MOVR | a | РР = a |
| ADD | b | РР = РР + b |
| MOVS | c | c = РР |
Рассмотренные форматы команд используются при так называемом естественном порядке выполнения программы. При этом подразумевается, что после выполнения любой команды, не меняющей в явном виде порядок выполнения программы, очередная команда выбирается из ячейки ЗУ, располагающейся сразу же вслед за ячейкой (или ячейками), содержащей код текущей команды. При четырехадресной системе кодирования команд ( рис.1,г ) первые три адреса выполняют те же функции, что и в трехадресной команде, а четвертый адрес указывает адрес ячейки, где хранится следующая выполняемая команда. Такая система обеспечивает принудительный порядок выполнения команд программы. Она хотя и повышает гибкость программирования, но практического применения не получила. Основной причиной этого является существенное увеличение размера каждой команды и, соответственно, увеличение объема ЗУ, необходимого для размещения программы, в то время как реальной потребности в такой кодировке каждой команды не существует.
Несколько особое положение занимает безадресное кодирование команд . Оно используются в компьютерах, имеющих стековую организацию памяти. Обращение к ячейкам такой памяти производится последовательно с помощью специального указателя стека ( УС ), определяющего рабочую в данный момент ячейку. Каждая ячейка снабжена тэгом – специальным признаком хранимой информации. Такая ЭВМ имеет структуру, представленную на рис. 3 . В ее состав помимо АЛУ входят два специальных буферных регистра РР1 и РР2 . Здесь значение тэгов следующее: Op – в данной ячейке хранится операнд, C – признак наличия в ячейке кода операции.

Рис. 3. Схема выполнения операции в ЭВМ с безадресной системой команд
Проиллюстрируем работу такой ЭВМ на примере вычисления выражения ((a + b) * c - d) / e .
На первых двух тактах работы из памяти извлекаются операнды a и b и помещаются в рабочие регистры РР1 и РР2 . Считав следующую ячейку стековой памяти, устройство управления по ее тэгу определяет, что данная информация представляет собой код операции. Этот код направляется в АЛУ, где и проводится сложение хранящихся в регистрах операндов с записью результата в один из рабочих регистров. Так как в следующей ячейке хранится операнд, то он направляется в РР , свободный от записанного результата. После этого производится выполнение следующей операции и так далее.
Такая структура ЭВМ обеспечивает высокое быстродействие, но требует весьма сложного программирования.