Cтраница 3
Система команд ЕС ЭВМ допускает обработку некоторых типов данных и в их нестандартном ( переменном) формате, В этом случае используется соответствующий код машинной операции, а длина операндов задается явно в самой команде. По командам такого вида операции над битовыми и символьными данными, например, могут применяться к аргументам одинаковой длины от до 256 байт. [31]
В командах форматов RR, RX и RS модифицируемый байт содержит регистры, в командах формата SI этот байт задает непосредственный операнд Ь, а в командах формата SS указывает длину операндов. [32]
В табл. 2 приведены тип и длина значения выражения, полученного в результате выполнения операций сложения, вычитания, умножения, деления и возведения в степень, в зависимости от типа и длины операндов. [33]
Команда N использует полное слово памяти в качестве маски для того, чтобы изменить значения битов, содержащихся в общем регистре. Длина операндов ограничивается 32 битами. Маска должна находиться в области памяти, расположенной на границе слова, а первый операнд должен - указывать исходное поле в общем регистре непосредственно или символически. [34]
Адреса самых левых байтов первого и второго операндов находятся в битах 8 - 31 общих регистров, заданных полями R) и J. Длины операндов в байтах содержатся в битах 8 - 31 общих регистров с номерами Ri 1 и R2 I. Биты 0 - 7 регистра R2 1 содержат символ-заполнитель, а содержимое битов 0 - 7 регистров Ri, Ri 1 и R2 игнорируется. [35]
![]() |
Значения битов формата команды. [36] |
Оба опе-рвида определяются в основной памяти как поля переменной длины. Длины операндов определяются полями L команды. Если заданы два поля длины, то код длины ( 0 - 15) определяет длину операндов от 1 до 16 байт. В формате с 8-разрядным полем L длина указывается только для поля первого операнда, который, таким образом, может занимать от 1 до 256 байт. [37]
Для сравнения целых значений в упакованном десятичном формате имеется одна команда формата SS. Длины операндов LI и L2 могут быть разными, но не могут превосходить 16 каждая. [38]
Логические операции в PL / I являются обобщением алголь-ных: их операндами могут быть не только элементарные логические значения ТВ и О В, но и их совокупности-битовые строки. Если длины операндов не совпадают, то более короткая строка дополняется справа нулями. Результат логической операции, определяемый побитно, имеет атрибут BIT. Если один из операндов VARYING, то и результат имеет атрибут VARYING. [39]
При этом длина операндов задается в явном виде в поле длины такой машинной команды. [40]
Команды формата SS определяют операции типа память - память над полями переменной длины. LZ указывают длины операндов, участвующих в операциях десятичной арифметики. Результат помещается на место первого операнда. [41]
В таблице использованы следующие сокращения для обозначения типа: I-целый; R-вещественный; С-комплексный. В скобках указана длина операндов и длина значения выражения в байтах. [42]
Операнды - положительные целые числа, занимающие только часть разрядов слова, имеют во всех разрядах левее старшей значащей цифры нули, а отрицательные - единицы. При необходимости увеличение длин операндов в сторону старших разрядов осуществляется простым добавлением разрядов, содержащих согласно знаку нули при положительном числе и единицы - при отрицательном. [43]
Работа команды завершается нормально, если результат помещается в поде первого операнда. Очевидна, что если длины операндов одинаковые, то второй операнд без изменения Помещается на место первого операнда. Если длина первого операнда больше длины второго операнда, то в старшие разряды первого операнда засылаются нули. Если второй операнд не помещается в ноле первого операнда, то старшие разряды второго операнда теряются, при этом фиксируется десятичное переполнение и может произойти прерывание программы, если 37 - й разряд Слова состояния программы равен единице, В результате выполнения команды ZAP второй операнд не изменяется. Изменяется только первый операнд. [44]
Работа команды завершается нормально, если результат помещается в поле первого операнда. Очевидно, что если длины операндов одинаковые, то второй операнд без изменения помещается на место первого операнда. Если длина первого операнда больше длины второго операнда, то в старшие разряды первого операнда засылаются нули. Если второй операнд не помещается в поле первого операнда, то старшие разряды второго операнда теряются, при этом фиксируется десятичное переполнение и может произойти прерывание программы, если 37 - й разряд слова состояния программы равен единице. В результате выполнения команды ZAP второй операнд не изменяется. Изменяется только первый операнд. [45]