Вещественные числа занимают также одно слово. Нулевой разряд определяет знак числа, разряды с 1-го по 7-й образуют порядок, а разряды с 8-го по 31-й — мантиссу. Положительные вещественные числа в знаковом разряде имеют нуль, поле порядка содержит показатель степени 16, увеличенный на 4016, а мантисса представляет собой 24-разрядную нормализованную шестнадцатеричную дробную часть числа, причем считается, что шестнадцатеричная точка стоит в мантиссе слева от старшей цифры. Нормализованность шестнадцатеричной мантиссы означает, что, по крайней мере, самая левая ее шестнадцатеричная цифра отлична от нуля, если таковая вообще имеется. Если мантисса получилась нулевой, то все число полагается равным нулю. Любой конечный результат операции действительной арифметики, который из-за ограниченности поля порядка не может быть представлен в слове, вызывает особый случай некорректности представления. Отрицательные вещественные числа представляют собой двоичное дополнение соответствующих положительных значений. В командах с вещественным непосредственным операндом применяются специальные короткие вещественные числа, образуемые отбрасыванием трех самых правых цифр мантиссы.
Встречаются команды короткие — в двухбайтовом формате — и длинные — четырехбайтовые. Все команды должны располагаться с границы четных байтов: если перед началом цикла выполнения команды в САК оказывается нечетный адрес, возникает особый случай запрещенного адреса команды. Первый байт любой команды содержит косвенный бит [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-разрядный логический вектор или же действительное число в коротком формате. В командах с непосредственным операндом косвенный бит игнорируется.