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