Формат машинной команды
Машинная программа — последовательность машинных команд.
Принцип хранимой программы (принцип фон Неймана): во время исполнения программа хранится в оперативной памяти вместе с данными. Каждая команда программы занимает ячейку памяти и имеет свой адрес (адрес ячейки).
Формат команды. Для всякого процессора машинная команда имеет стандартный формат и строго фиксированную длину. Команда состоит из кода операции и адресной части. Код операции определяет действие, которое должен выполнить процессор; адресная часть содержит адреса величин, над которыми должна быть произведена эта операция:
КОМАНДА
Код операции |
Адреса величин |
В зависимости от структуры адресной части команды, процессоры делятся на трехадресные, двухадресные, одноадресные и безадресные (стековые).
Формат одноадресной команды:
КОМАНДА
Код операции (что делать?) |
Адрес аргумента или результата (откуда взять или куда поместить) |
Формат трехадресной команды:
КОМАНДА
Код операции |
Адрес первого аргумента |
Адрес второго аргумента |
Адрес результата |
Длина команды. Длина кода операции зависит от числа операций, входящих в систему команд компьютера. Так код операции длиной в 4 бита позволяет хранить коды до 16 (24) различных команд (с двоичными кодами от 0000 до 1111). Можно сформулировать простое правило определения оптимальной длины кода операции:
,
где К — количество команд в системе команд машинного языка, k — длина поля кода операции (в битах). Фактически во многих случаях длина поля кода операции берется с избытком, что, например, легко позволяет расширять систему команд.
Пример 1. В системе команд компьютера содержится 50 команд. Какова оптимальная длина кода операции?
Решение. Поскольку 25 = 32 < 50 < 64 = 26, то длина кода операции должна быть не меньше 6 бит.
Большинство арифметических и логических операций имеют два операнда и поэтому трехадресная структура машинной команды наиболее естественна. В двухадресной команде один из адресов используется и для аргумента и для результата (после выполнения команды), что несущественно влияет на методику программирования на языке машинных команд (ЯМК) такого компьютера. В одноадресной машине возникает необходимость использования специального элемента памяти, называемого сумматором или аккумулятором.
В трех- (двух-) адресной машине длины полей всех адресов одинаковы, поэтому общую длину команды (в битах) можно определить по формуле:
d = k + n а,
где k — длина поля кода операций, n — количество адресов в адресной части (n = 1, 2, 3), а — длина поля адресной части (в битах). Очевидно, в этом случае размеры адресуемого пространства (А — количество адресуемых ячеек памяти) определяются формулой:
А = 2а.