Встречаются команды короткие — в двухбайтовом формате — и длинные — четырехбайтовые. Все команды должны располагаться с границы четных байтов: если перед началом цикла выполнения команды в САК оказывается нечетный адрес, возникает особый случай запрещенного адреса команды. Первый байт любой команды содержит косвенный бит [42] в разряде 0 и код операции (КОП) в разрядах с 1-го по 7-й. Не все коды операций имеют смысл, и не во всех командах используется косвенный бит. Появление запрещенного КОП вызывает особый случай некорректной команды. В большинстве команд в разрядах с 8-го по 11-й указывается либо общий регистр, либо 4-разрядная литерная константа, употребляемая в качестве маски, а в разрядах с 12-го по 15-й задается второй общий регистр.
Имеются четыре вида команд: регистр-регистр (двухбайтовые команды), регистр-память, непосредственная и байтовая. Каждый тип отличается присущей ему характерной интерпретацией и способом адресации, которые мы сейчас и рассмотрим подробнее.
1. Регистр-регистр. Во всех командах типа регистр-регистр в разрядах с 12-го по 15-й указывается регистр, выступающий в качестве одного из операндов команды. Если задан косвенный бит, то операнд расположен по адресу, содержащемуся в 16—31-м разрядах регистра, номер которого указан в 12—15-м разрядах команды. В разрядах с 8-го по 11-й может быть задан или регистр, или маска. В командах CCS и MCS косвенный бит не используется.
Рисунок 25.3. Форматы представления информации,
2. Регистр-память. Обычно в командах типа регистр-память в разрядах с 8-го по 11-й указывается регистр или 4-разрядная маска, и они выступают в качестве одного из операндов. Остальная часть команды используется для формирования исполнительного адреса по следующему правилу:
— Если косвенный бит равен 0 и указатель индекс-регистра (разряды с 12-го по 15-й) равен 0, то исполнительный адрес дается полем адреса (разряды с 16-го по 31-й) команды.
— Если косвенный бит равен нулю, а указатель индекс-регистра нулю не равен, то адресная часть команды дополняется слева нулями и складывается (разумеется, в дополнительном коде) с содержимым индекс-регистра. Разряды 16—31 результата образуют исполнительный адрес. Содержимое индекс-регистра не изменяется,
— Если косвенный бит не нуль, а указатель индекс регистра — нуль, адресное поле указывает местонахождение в памяти двухбайтового косвенного поля. Содержимое косвенного поля образует исполнительный адрес. Если косвенное поле начинается не с границы четного байта, происходит особый случай некорректной косвенной адресации.
— Если косвенный бит и указатель индекс-регистра не равны нулю, косвенное поле складывается с содержимым индекс-регистра и в качестве исполнительного адреса берутся правые 16 разрядов суммы. При этом может иметь место особый случай некорректной косвенной адресации.
3. Непосредственная. Во всех непосредственных командах регистр указывается в разрядах с 8-го по 11-й, а в разрядах 12—31 содержится непосредственный операнд. В качестве непосредственного операнда может выступать 20-разрядное целое в дополнительном коде, 20-разрядный логический вектор или же действительное число в коротком формате. В командах с непосредственным операндом косвенный бит игнорируется.
4. Байтовая. Команды байтового типа выполняются аналогично командам типа регистр-память.
Описание команд
Опишем в этом разделе каждую команду. В первой строке описания приводится краткая справка, состоящая из названия команды, ее формата (RR, RS, IM, СН[43]), шестнадцатеричного кода операции, записи команды на языке ассемблера[44] и перечисления разрядов регистра признака результата, которые могут командой изменяться. Затем следует словесное описание. Содержимое РПР, устанавливаемое в результате выполнения команды, обозначает- обозначается символами О, L, G, Е[45]) или Нет (указание на то, что РПР не изменяется).
В регистр R1 пересылается содержимое слова по исполнительному адресу. Пересылаемое значение сравнивается с нулем, и в РПР устанавливается соответствующий разряд: G, L или Е[46]). Если исполнительный адрес не попадает на границу слова, происходит особый случай неверной адресации слова.
Эта команда выполняется аналогично команде Load Register с тем отличием, что исполнительный адрес вычисляется по правилу адресации команд типа регистр-память.