Cтраница 2
Если длина поля первого операнда больше, чем это необходимо для размещения результата операции, то старшие байты первого операнда дополняются символьными десятичными нулями. Если результат не помещается в поле первого операнда, то старшие разряды числа теряются. [16]
Результат помещается в поле первого операнда. Длина второго операнда не может превышать восьми байтов и должна быть всегда меньше длины первого операнда. Кроме того, в первом операнде должно быть столько нулевых старших цифр, каков размер поля второго операнда. В этих условиях переполнение результата произойти не может. Поля могут перекрываться, но так, чтобы совпадали их правые ( младшие) байты. Признак результата остается без изменений. Заметим, что для расширения поля первого операнда может использоваться команда сложения с очисткой, если это необходимо. [17]
Результат умножения помещается в поле первого операнда. Знак результата определяется по алгебраическим правилам, даже если один или оба операнда равны нулю. [18]
Результат умножения занимает все поле первого операнда. Знак результата определяется алгебраически с учетом знаков множимого и множителя. Длина множителя не должна превышать 8 байтов, а также не должна быть равной или превышать длину, указанную первым операндом. Формула для определения длины первого операнда: длина области результата равна длине множителя плюс длина множимого и плюс 1 байт. [19]
При десятичном умножении или делении поле первого операнда короче поля второго операнда или равно ему. [20]
БФ) и помещается в поле первого операнда на место байта аргумента. [21]
Остаток размещается в младших байтах поля первого операнда, и его длина в байтах равна длине делителя. Для записи частного отведены оставшиеся LI - L. [22]
Однако результат не превышает размера поля первого операнда, указанного в команде. Когда старшие значащие цифры результата операции теряются из-за того, что результат не помещается в отведенное для него поле, причем бит маски десятичного переполнения установлен в 1, происходит программное прерывание по десятичному переполнению. Для команд редактирования только один операнд - образец - имеет явно заданную длину; другой операнд - источник - рассматривается как содержащий столько цифр, сколько нужно для завершения операции. [23]
Частное помещается в левую часть поля первого операнда. Остаток помещается в правую часть поля первого операнда и имеет длину, равную длине делителя. Частное и остаток занимают все поле делимого; следовательно, адресом поля частного является адрес первого операнда. Случай, когда код длины делителя больше 7 ( 15 цифр плюс знак) или больше либо равен коду длины делимого, рассматривается как особый случай спецификации. Операция подавляется, и происходит программное прерывание. [24]
Если результат операции не помешается в поле первого операнда или длина второго операнда больше длины первого, возникает программное прерывание. Прерывание не возникает, если соответствующий бит маски программы в ССП имеет нулевое значение. [25]
Если сама команда пересылки находится в поле первого операнда, то необходимо учитывать тот факт, что данная команда может повторно выбираться из памяти и расшифровываться даже в отсутствие прерывания во время выполнения. Нельзя заранее сказать, в какой именно момент выполнения может произойти такая повторная выборка. [26]
Если, например, выбрать длину поля первого операнда равной 2 байтам, то старшие разряды исходного числа потеряются в результате усечения результата слева. [27]
Операнды перемножаются, и результат помещается в поле первого операнда. [28]
Выборка и последующая запись конкретного байта в поле первого операнда не обязательно следуют непосредственно друг за другом. [29]
Команда SP вычитает из упакованного десятичного содержимого поля первого операнда упа-кованое десятичное содержимое поля второго операнда. Разность помещается в поле первого операнда. В обоих полях должны находиться упакованные десятичные числа с правильными кодами знаков. Прерывание при десятичном переполнении происходит по тем же причинам, которые были описаны для команды АР. [30]