Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

IBM370

.pdf
Скачиваний:
36
Добавлен:
02.06.2015
Размер:
5.21 Mб
Скачать

Поля первого и второго операндов могут перекрываться, но при этом самые младшие байты операндов должны совпадать; так, например, можно сложить число с самим собой.

Знак результата определяется алгебраически. Когда операция завершается без переполне-

ния, нулевая сумма имеет положительный знак; но когда старшие разряды теряются вслед-

ствие переполнения, нулевая сумма может быть либо положительной, либо отрицательной в соответствии с тем, каким должен был быть знак правильной суммы.

Признак результата:

0– сумма равна нулю;

1– сумма меньше нуля;

2– сумма больше нуля;

3– переполнение.

Программные прерывания:

операция (если отсутствуют средства обработки десятичных данных);

доступ (выборка второго операнда, выборка и запись первого операнда);

данные;

десятичное переполнение.

СРАВНЕНИЕ ДЕСЯТИЧНОЕ

CP

D1(L1,B1),D2(L2,B2)

[SS]

 

 

 

 

 

 

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦

F9

¦

L1

¦ L2

¦

B1

¦

D1

¦

B2

¦

D2

¦

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

31

32

35

36

 

47

Первый операнд сравнивается со вторым, и признак результата отражает результат срав-

нения.

Сравнение является алгебраическим, учитывающим знаки и все цифры обоих операндов.

Проверяется правильность знаков и всех цифр. Любой код плюса (минуса) считается эквива-

лентным любому другому коду плюса (минуса). Если поля не равны по длине, то короткое поле слева дополняется нулями. При сравнении полей, содержимое которых равно нулю, поля счи-

таются равными независимо от знака. В результате операции сравнения ни один из операндов не изменяется. Переполнения не бывает.

Поля первого и второго операндов могут перекрываться, но таким образом, чтобы совпада-

ли их младшие байты. Следовательно, можно сравнить число с самим собой.

Признак результата: 0 – операнды равны;

1– первый операнд меньше;

2– первый операнд больше;

3– не бывает.

Программные прерывания:

261

операция (если отсутствуют средства обработки десятичных данных);

доступ (выборка первого и второго операндов);

данные.

ДЕЛЕНИЕ ДЕСЯТИЧНОЕ

DP

D1(L1,B1),D2(L2,B2)

[SS]

 

 

 

 

 

 

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦

FD

¦

L1

¦ L2

¦

B1

¦

D1

¦

B2

¦

D2

¦

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

31

32

35

36

 

47

Делимое (первый операнд) делится на делитель (второй операнд) и замещается частным и остатком.

Частное помещается в левую часть поля первого операнда. Остаток помещается в правую часть поля первого операнда и имеет длину, равную длине делителя. Частное и остаток зани-

мают все поле делимого; следовательно, адресом поля частного является адрес первого опе-

ранда. Число байтов, занимаемых частным, равно L1-L2, а код длины частного на единицу меньше (L1-L2–1). Случай, когда код длины делителя больше 7 (15 цифр плюс знак) или больше либо равен коду длины делимого, рассматривается как особый случай спецификации. Опера-

ция подавляется, и происходит программное прерывание.

Делимое, делитель, частное и остаток являются целыми со знаком, выровненными в своих полях по правым концам. Знак частного определяется алгебраически в соответствии со знака-

ми делимого и делителя. Знак остатка тот же, что и у делимого. Эти правила соблюдаются и в тех случаях, когда частное или остаток равны нулю.

Переполнения не бывает. Частное с числом цифр больше допустимого рассматривается как особый случай десятичного деления. Операция подавляется, и происходит программное пре-

рывание. Делимое и делитель в памяти не изменяются.

Поля делимого и делителя могут перекрываться, но так, чтобы совпадали их младшие бай-

ты.

Признак результата не изменяется.

Программные прерывания:

операция (если отсутствуют средства обработки десятичных данных);

доступ (выборка второго операнда, выборка и запись первого операнда);

спецификация;

данные;

десятичное деление.

Замечания по программированию

Максимальная длина делимого составляет 31 цифру и знак. Так как минимальная длина остатка – одна цифра и знак, максимальная длина частного – 29 цифр и знак.

262

Особый случай десятичного деления можно заранее обнаружить пробным вычитанием.

Крайний левый разряд поля делителя помещается на одну позицию правее крайнего левого разряда поля делимого. Если выровненный таким образом делитель меньше делимого или ра-

вен ему, то это указывает на особый случай десятичного деления.

Особый случай десятичного деления возникает тогда, когда делимое не имеет по крайней мере одного старшего нуля.

ОТРЕДАКТИРОВАТЬ

ED

D1(L,B1),D2(B2)

 

[SS]

 

 

 

 

 

 

+----------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

+

¦

DE

¦

L

¦

B1

¦

D1

¦

B2

¦

D2

¦

+----------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

31

32

35

36

 

47

Формат исходных данных (второй операнд) меняется из упакованного на зонный и редакти-

руется по образцу (первый операнд). Результат операции помещается на место первого опе-

ранда.

Команда редактирования реагирует на знаки чисел и позволяет вставлять в число раздели-

тели (запятые и десятичную точку), а также уничтожать незначащие старшие нули. Эта коман-

да упрощает заполнение пробелами полностью нулевых полей. С ее помощью можно отредак-

тировать несколько чисел сразу и объединить текстовую информацию с числовой.

Поле длины относится к образцу (первый операнд). Образец представляется в зонном фор-

мате и может содержать любые символы алфавита. Исходные данные (второй операнд) пред-

ставлены в упакованном формате. В левых четырех битах каждого байта исходных данных должен быть код десятичной цифры (0000–1001). Комбинации 1010–1111 воспринимаются как неправильные данные и служат причиной программного прерывания. Правые 4 бита могут быть либо знаком, либо цифрой.

Результат получается таким, как если бы оба операнда обрабатывались слева направо байт за байтом. Перекрытие полей операндов дает непредсказуемый результат.

В течение процесса редактирования каждый символ образца может быть:

-оставлен без изменения;

-замещен цифрой исходных данных, представленной в формате с зоной;

-замещен первым символом образца, называемым символом-заполнителем.

Что будет сделано с каждым конкретным символом, зависит от типа символа образца, со-

стояния указателя значимости и от того, является ли проверяемая цифра исходных данных ну-

лем.

Символы образца. Имеются четыре типа символов образца: выбор цифры, начало значи-

мости, разделение полей и символ сообщения. Кодируются они следующим образом:

263

Название

Код

 

 

Выбор цифры

0010 0000

Начало значи-

0010 0001

мости

 

Разделение

0010 0010

полей

 

Символ сооб-

любой

щения

другой

 

 

При обнаружении в образце символа выборка цифры или символа начала значимости про-

изводится проверка указателя значимости и цифры исходных данных. В результате проверки символ образца замещается либо расширенной исходной цифрой (цифрой в формате с зоной),

либо символом-заполнителем. Кроме того, обнаружение символа выбора цифры или символа начала значимости может привести к изменению указателя значимости.

Символ разделения полей ограничивает отдельные поля при редактировании нескольких полей с помощью одной команды. Этот символ всегда замещается в результате символом-

заполнителем, и при этом указатель значимости всегда устанавливается в нуль.

Символы сообщения в зависимости от состояния указателя значимости либо замещаются символом-заполнителем, либо остаются без изменений. Они используются для дополнения пробелами, знаками пунктуации или текстом значащей части поля либо для вставки символов,

определяемых знаком числа.

Символ-заполнитель. Символ-заполнитель берется из образца в ходе операции редакти-

рования. В качестве символа-заполнителя используется первый символ образца. Символ за-

полнитель может быть представлен любым кодом, в том числе и кодом, несущим управляющие функции. Так, например. если он является символом выборка цифры или символом начала значимости, то сначала этот код запоминается как символ-заполнитель и уже после этого про-

изводятся действия редактирования, определяемые данным символом.

Цифры источника. Каждый раз, когда в образце встречается символ выбора цифры или символ начала значимости, производится проверка, позволяющая установить, может ли новая цифра источника быть помещена в поле образца. Цифра источника либо переводится в зонный формат и замещает символ образца, либо игнорируется. Когда в старшей части байта обнару-

живается код знака, операция прекращается.

Цифры исходных данных выбираются из второго операнда по байту за один раз; при опера-

ции редактирования каждый байт источника выбирается и анализируется. Каждая исходная цифра проверяется на равенство нулю только один раз. Левые 4 разряда анализируются пер-

выми, а правые 4 бита, если они содержат код цифры, хранятся до следующего символа об-

разца, который вызывает анализ цифры. Проверка с целью выяснения того, не находится ли в правых 4 разрядах код знака, производится одновременно с анализом левых 4 битов. Если в

264

правых 4 битах байта находится код знака, то новый байт исходных данных выбирается из па-

мяти для сопоставления со следующим символом образца, требующим проверки источника на наличие цифры.

Цифра источника переводится из упакованного формата в формат с зоной и запоминается в поле результата. При этом ей присваивается код зоны, равный 1111.

Указатель значимости. Указатель значимости своим состоянием “включен” или “выключен”

(1 или 0) показывает соответственно значимость или незначимость последующих цифр источ-

ника или символов сообщений. Значащие исходные цифры замещают соответствующие сим-

волы выбора цифры или начала значимости в поле результата; символы сообщения в поле ре-

зультата, являющиеся значащими, не изменяются.

Указатель значимости своим состоянием или “включен” или “выключен” также определяет соответственно отрицательное и положительное исходные числа из источника и является од-

ним из факторов, определяющих признак результата.

Указатель устанавливается в состояние “выключен”, если еще не находится в этом состоя-

нии в начале операции редактирования, если встречается символ-разделитель полей или если обнаруживается код знака плюс в младших четырех битах байта в цифре источника. Любой из кодов 1010, 1100, 1110 и 1111 рассматривается как код знака плюс.

Указатель устанавливается в состояние “включен”, если уже не находится в этом состоянии,

когда в образце встречается символ начала значимости и цифра источника имеет правильный код или когда в образце встречается символ выборка цифры и цифра источника не равна нулю при условии, что младшие биты байта источника не содержат код знака плюс.

Во всех других ситуациях указатель не изменяется. Код знака минус не влияет на указатель значимости.

Символы результата. Поле результата операции редактирования помещается в поле об-

разца и равно ему по длине. Оно состоит из символов образца, символов-заполнителей и цифр источника в зонном формате.

Если в образце встречается символ сообщения и указатель значимости включен, то символ сообщения остается в образце без изменения. Если в образце встречается символ-

разделитель или если указатель значимости выключен и в образце встречается символ сооб-

щения, то символ-заполнитель помещается в результате вместо символа образца.

Цифра, равная нулю, считается незначащей, и символ-заполнитель замещает символ об-

разца, если последний является либо символом выбора цифры, либо символом начала значи-

мости и при этом указатель значимости выключен. Если в образце встречаются либо символ выбора цифры, либо символ начала значимости и при этом указатель значимости включен или цифра исходных данных не равна нулю, то эта цифра переводится в зонный формат и заме-

щает символ образца.

Определение признака результата. Все рассматриваемые цифры проверяются на равен-

ство коду 0000. После завершения операции редактирования с помощью признака результата

265

регистрируется знак последнего редактированного поля и равенство нулю всех цифр источника этого поля.

Признак результата устанавливается в 0, когда последнее поле равно нулю, т.е. все рас-

сматриваемые цифры источника после последнего разделителя полей нули; когда образец не имеет символов выбора цифры и начала значимости, т.е. когда второй операнд не проверяет-

ся; когда последним символом образца является разделитель полей или когда после послед-

него разделителя полей не встречаются символы выбора цифры или начала значимости.

Если последнее редактируемое поле не нулевое и указатель значимости включен, признак результата устанавливается равным 1, показывая, что значение в последнем поле меньше ну-

ля.

Когда последнее редактируемое поле не равно нулю и указатель значимости выключен,

признак результата устанавливается равным 2, показывая, что последнее поле больше нуля.

В таблице 10.2 приведены сводные данные об операции редактирования. Четыре левые колонки показывают все возможные комбинации условий, которые могут встретиться при вы-

полнении операций редактирования. Две правые колонки определяют выполняемые действия

– тип символа, помещаемого в поле результата, и новую установку указателя значимости.

Признак результата:

0– последнее поле нулевое;

1– содержимое последнего поля меньше нуля;

2– содержимое последнего поля больше нуля;

3– не бывает.

Программные прерывания:

операция (если отсутствуют средства обработки десятичных данных);

доступ (выборка второго операнда, выборка и запись первого операнда).

Таблица 10.2

Операция редактирования

Условия

 

 

Результат

 

 

 

 

 

 

 

Сим-

Предыду-

Ц

В младшей

Символ

Состояние указа-

вол об-

щее состояние

ифра

позиции ис-

результата

теля значимости

разца

указателя зна-

ис-

точника код

 

после проверки

 

чимости

точ-

знака плюс

 

цифры

 

 

ника

 

 

 

 

 

 

 

 

 

Выбор

Выключен

0

–1

Символ-

Выключен

цифры

 

 

 

заполнитель

 

 

 

 

 

 

 

 

 

1–

Нет

Цифра ис-

Включен

 

 

9

 

точника

 

 

 

 

 

 

 

 

 

1–

Да

то же

Выключен

 

 

 

 

 

 

266

Условия

 

 

Результат

 

 

 

 

 

 

 

Сим-

Предыду-

Ц

В младшей

Символ

Состояние указа-

вол об-

щее состояние

ифра

позиции ис-

результата

теля значимости

разца

указателя зна-

ис-

точника код

 

после проверки

 

чимости

точ-

знака плюс

 

цифры

 

 

ника

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

Включен

0–

Нет

то же

Включен

 

 

9

 

 

 

 

 

 

 

 

 

 

 

0–

Да

то же

Выключен

 

 

9

 

 

 

 

 

 

 

 

 

Нача-

Выключен

0

Нет

Символ-

Включен

ло зна-

 

 

 

заполнитель

 

чимости

 

 

 

 

 

 

 

 

 

 

 

 

 

0

Да

то же

Выключен

 

 

 

 

 

 

 

 

1–

Нет

Цифра ис-

Включен

 

 

9

 

точника

 

 

 

 

 

 

 

 

 

1–

Да

то же

Выключен

 

 

9

 

 

 

 

 

 

 

 

 

 

Включен

0–

Нет

то же

Включен

 

 

9

 

 

 

 

 

 

 

 

 

 

 

0–

Да

то же

Выключен

 

 

9

 

 

 

 

 

 

 

 

 

Раз-

–1

–2

–2

Символ-

Выключен

делитель

 

 

 

заполнитель

 

полей

 

 

 

 

 

 

 

 

 

 

 

Сим-

Выключен

–2

–2

то же

Выключен

вол со-

 

 

 

 

 

общения

 

 

 

 

 

 

 

 

 

 

 

 

Включен

–2

–2

то же

Включен

 

 

 

 

 

 

1Не влияет на символ результата и новое состояние указателя значимости.

2Не имеет смысла, так как цифра источника не проверяется.

Замечания по программированию

Как правило, второй операнд короче первого, так как каждая цифра исходных данных пере-

водится в зонный формат и запоминается в первом операнде.

При редактировании общее число символов выбора цифры и начала значимости должно быть равно количеству цифр исходных данных.

267

Если символом-заполнителем является пробел, символ начала значимости не встречается в образце и все цифры исходных данных являются нулями, то после выполнения операции ре-

дактирования пол результата будет заполнено пробелами.

Признак результата или показывает, что последнее поле содержит нули, или в противном случае определяет состояние указателя значимости. Указатель значимости отражает знак ис-

ходных данных только в том случае, если последний проверяемый байт источника содержит код знака в правой половине байта. Если одной командой редактируется несколько полей, дей-

ствие признака результата распространяется только на поле, следующее за последним разде-

лителем полей.

ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ

EDMK

 

D1(L,B1),D2(B2)

[SS]

 

 

 

 

 

 

+----------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ DF

 

¦

L

 

¦

B1

¦

D1

¦

B2

¦

D2

¦

+----------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

 

15

16

19

20

31

32

35

36

 

47

Формат исходных данных (второй операнд) преобразуется из упакованного в зонный и ре-

дактируется по образцу (первый операнд).

Адрес каждой первой значащей цифры результата записывается в общий регистр 1. Отре-

дактированный результат замещает образец.

Если исключить дополнительное занесение адреса байта в биты 8–31 общего регистра, то операция совпадает с операцией ОТРЕДАКТИРОВАТЬ. Адрес байта заносится каждый раз, ко-

гда в поле результата помещается цифра источника в зонном формате при включенном указа-

теле значимости перед проверкой. Адрес регистра 1 явно не задается. Содержимое битов 0–7

регистра не изменяется.

Признак результата:

0 – содержимое последнего поля равно нулю;

1 – содержимое последнего поля меньше нуля;

2 – содержимое последнего поля больше нуля;

3 – не бывает.

Программные прерывания:

операция (если отсутствуют средства обработки десятичных данных);

доступ (выборка второго операнда, выборка и запись первого операнда);

данные.

268

Замечания по программированию

Команда ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ упрощает программирование денежных сим-

волов с переменным местоположением2. Адрес символа, занесенный в общий регистр 1, на единицу больше адреса байта, в который должен быть помещен знак денежной единицы. Ко-

манда ПЕРЕХОД ПО СЧЕТЧИКУ (BCTR) с нулем в поле R2 может быть использована для того,

чтобы уменьшить занесенный адрес на единицу.

Когда значимость вводится принудительно, адрес символа запоминается. Поэтому адрес символа образца, следующего за символом начала значимости, должен быть помещен в об-

щий регистр 1 заранее.

УМНОЖЕНИЕ ДЕСЯТИЧНОЕ

MP

D1(L1,B1),D2(L2,B2)

[SS]

 

 

 

 

 

 

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦

FD

¦

L1

¦ L2

¦

B1

¦

D1

¦

B2

¦

D2

¦

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

31

32

35

36

 

47

Произведение множителя (второй операнд) и множимого (первый операнд) замещает мно-

жимое.

Длина множителя ограничена 15 цифрами и знаком и должна быть меньше длины множимо-

го. Код длины L2, больший 7 или больший или равный коду длины L1, рассматривается как осо-

бый случай спецификации. Операция подавляется, и происходит программное прерывание.

Во множимом должно быть по крайней мере столько нулевых старших байтов, каков размер в байтах поля множителя. В противном случае распознается особый случай в данных, опера-

ция прекращается и происходит программное прерывание. Такое определение поля множимо-

го исключает возможность переполнения поля результата. Максимальная длина произведения равна 31 цифре. По крайней мере одна старшая цифра в поле произведения равна нулю.

Все операнды и результаты рассматриваются как целые со знаком, выровненные в своих полях по правым концам. Знак произведения определяется алгебраически в соответствии со знаками множимого и множителя, даже если один или оба операнда равны нулю.

Поля множителя и произведения могут перекрываться, но так, чтобы совпадали их младшие байты.

Признак результата остается без изменения.

Программные прерывания:

операция (если отсутствуют средства обработки десятичных данных);

доступ (выборка второго операнда, выборка и запись первого операнда);

спецификация;

данные.

269

СДВИГ С ОКРУГЛЕНИЕМ ДЕСЯТИЧНЫЙ

 

 

 

 

 

 

SRP

D1(L1,B1),D2(B2),I3

 

[SS]

 

 

 

 

 

 

 

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ F0

 

¦ L1

¦ I3

¦

B1

¦

D1

 

¦

B2

¦

D2

¦

+--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

32

35

36

 

47

Первый операнд сдвигается в направлении и на число десятичных позиций, которые указа-

ны адресом второго операнда. Если задан сдвиг вправо, то результат округляется. При этом используется коэффициент округления, указанный в поле I3. Код команды имеет несколько не-

стандартную структуру.

Адрес второго операнда для определения данных не используется. Вместо этого содержи-

мое битов 26–31 адреса, рассматриваемое как двоичное число со знаком, указывает направ-

ление сдвига и число десятичных позиций, на которое будет сдвинут первый операнд. Осталь-

ная часть адреса игнорируется. Если 26-ой разряд адреса равен нулю, то это означает, что сдвиг производится влево. При этом двоичное число в прямом коде в разрядах 27–31 адреса показывает количество десятичных позиций, на которое производится сдвиг. Равенство разря-

да 26 единице означает сдвиг вправо, причем в этом случае разряды 26–31 содержат двоичное число в дополнительном коде, определяющее величину сдвига.

Первый операнд представлен в упакованном десятичном формате. Сдвигаются только цифры операнда, знак в сдвиге не участвует. Освобожденные десятичные позиции заполняют-

ся нулями.

Во время сдвига вправо разряды 12–15 поля I3 кода команды используются для округления результата. Округление производится сложением содержимого этих битов с последней выдви-

нутой цифрой сдвигаемого операнда. Если при этом возникает перенос, то он распространяет-

ся влево. При этом сложении первый операнд и коэффициент округления рассматриваются как положительные числа. На всех шагах, за исключением проверки правильности младших кодов и участия в округлении, цифры, выдвинутые за младшую позицию поля, игнорируются и теря-

ются.

При отсутствии переполнения знак нулевого результата всегда положительный. Во всех других случаях знак результата совпадает со знаком исходного сдвигаемого числа.

В случае если первый операнд содержит неправильные коды знака или цифр или же цифра коэффициента округления имеет неправильный код, то распознается особый случай в данных.

Правильность кодов первого операнда проверяется независимо от того, указан ли сдвиг, а ко-

эффициент округления проверяется даже тогда, когда сложение с целью округления фактиче-

ски не выполняется. Операция прекращается всегда, за исключением случая, когда код знака неправильный. В последнем случае операция подавляется.

2 Имеется в виду западная система, где обозначение денежной единицы стоит перед, а не после суммы, к которой этот знак относится (например, $1000).

270

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]