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

IBM370

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

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

В результате сдвига положительного числа на 63 разряда с помощью команды СДВИГ ВЛЕВО ДВОЙНОЙ АРИФМЕТИЧЕСКИЙ получается нулевой результат, при сдвиге отрицатель-

ного числа – результат –263.

СДВИГ ВЛЕВО ДВОЙНОЙ КОДА

SLDL

 

R1,D2(B2)

 

[RS]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 8D

 

¦

R1

¦ ////

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Первый операнд, представляющий собой двойное слово, сдвигается влево на число двоич-

ных позиций, определяемое адресом второго операнда. Содержимое битов 12–15 кода данной команды игнорируется.

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

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

В сдвиге участвуют все 64 разряда первого операнда. Старшие биты без проверки выдви-

гаются за пределы общего регистра с четным номером и теряются. В освобождающиеся пози-

ции регистров заносятся нули.

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

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

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

СДВИГ ВЛЕВО АРИФМЕТИЧЕСКИЙ

SLA

R1,D2(B2)

 

[RS]

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 8B

 

¦

R1

¦ ////

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Целая часть первого операнда сдвигается влево на число двоичных позиций, определяемое адресом второго операнда. Содержимое битов 12–15 данной команды игнорируется.

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

Знак первого операнда остается без изменения. В сдвиге влево принимает участие 31 раз-

ряд целой части числа. В освобождающиеся младшие позиции заносятся нули.

241

Если из позиции 1 регистра сдвигается бит, не совпадающий со знаковым, то возникает пе-

реполнение. Оно вызывает программное прерывание, если бит маски переполнения в опера-

циях с фиксированной точкой равен единице.

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

0– результат равен нулю;

1– результат меньше нуля;

2– результат больше нуля;

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

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

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

переполнение с фиксированной точкой.

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

Если величина сдвига задана числом в пределах от 31 до 63, то вся целая часть будет сдвинута за пределы регистра. В результате сдвига за пределы регистра положительного чис-

ла регистр будет содержать нулевое значение. В случае сдвига отрицательного числа регистр будет содержать значение –231.

СДВИГ ВЛЕВО КОДА

SLL

R1,D2(B2)

 

[RS]

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 89

 

¦

R1

¦ ////

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

рого операнда. Содержимое битов 12–15 кода данной команды игнорируется.

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

В сдвиге участвуют все 32 разряда первого операнда. Старшие биты без проверки выдви-

гаются за пределы общего регистра и теряются. В освобождающиеся позиции регистров зано-

сятся нули.

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

Программные прерывания отсутствуют.

СДВИГ ВПРАВО ДВОЙНОЙ АРИФМЕТИЧЕСКИЙ

SRDA

 

R1,D2(B2)

 

[RS]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 8E

 

¦

R1

¦ ////

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

242

Целая часть первого операнда длиной в двойное слово сдвигается вправо на число двоич-

ных позиций, определяемое адресом второго операнда. Содержимое битов 12–15 данной ко-

манды игнорируется.

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

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

Первый операнд рассматривается как число, состоящее из 63 разрядов целой части и зна-

кового бита – старшего разряда регистра с четным номером. При сдвиге знак числа не изменя-

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

сти числа, а содержимое этого регистра участвует в сдвиге как продолжение целой части чис-

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

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

0– результат равен нулю;

1– результат меньше нуля;

2– результат больше нуля;

3– не бывает.

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

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

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

Сдвиг вправо на один разряд эквиваленте делению числа на 2 с округлением в сторону меньшего числа. Если четное число сдвигается вправо на одну позицию, результат получается таким, как при делении данного числа на 2. Если сдвигается нечетное число, результат совпа-

дает с результатом деления на 2 следующего меньшего четного числа. Например, число +5,

сдвинутое вправо на одну позицию, дает результат, равный +2, в то время как число –5 дает результат, равный –3.

Если величина сдвига равна 63, вся целая часть числа будет выдвинута за пределы реги-

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

СДВИГ ВПРАВО ДВОЙНОЙ КОДА

SRDL

 

R1,D2(B2)

 

[RS]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 8C

 

¦

R1

¦ ////

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

243

Первый операнд, представляющий собой двойное слово, сдвигается вправо на число дво-

ичных позиций, определяемое адресом второго операнда. Содержимое битов 12–15 кода дан-

ной команды игнорируется.

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

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

В сдвиге участвуют все 64 разряда первого операнда. Младшие биты без проверки выдви-

гаются за пределы общего регистра с нечетным номером и теряются. В освобождающиеся по-

зиции регистров заносятся нули.

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

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

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

СДВИГ ВПРАВО АРИФМЕТИЧЕСКИЙ

SRA

R1,D2(B2)

 

[RS]

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 8A

 

¦

R1

¦ ////

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

мое адресом второго операнда. Содержимое битов 12–15 данной команды игнорируется.

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

Знак первого операнда остается без изменения. В сдвиге вправо принимает участие 31 раз-

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

ряду числа. Младшие биты без проверки выдвигаются за пределы регистра и теряются.

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

0– результат равен нулю;

1– результат меньше нуля;

2– результат больше нуля;

3– не бывает.

Программные прерывания отсутствуют.

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

Если величина сдвига находится в пределах от 31 до 63, вся целая часть числа будет вы-

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

будет получен нулевой результат, а если над отрицательным – результат –1.

244

СДВИГ ВПРАВО КОДА

 

 

 

 

 

SRL

R1,D2(B2)

 

[RS]

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 88

 

¦

R1

¦ //// ¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Первый операнд сдвигается вправо на число двоичных позиций, определяемое адресом второго операнда. Содержимое битов 12–15 кода данной команды игнорируется.

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

В сдвиге участвуют все 32 разряда первого операнда. Младшие биты без проверки выдви-

гаются за пределы общего регистра и теряются. В освобождающиеся позиции регистра зано-

сятся нули.

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

Программные прерывания отсутствуют.

ЗАПИСЬ В ПАМЯТЬ

 

 

 

 

 

ST

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

50

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Первый операнд записывается в память по адресу второго операнда.

32 разряда из общего регистра помещаются без изменения на место второго операнда.

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

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

доступ (запись в память на место второго операнда).

ЗАПИСЬ В ПАМЯТЬ СИМВОЛА

STC

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 42

 

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Биты 24–31 общего регистра, заданного полем R1, помещаются без изменения на место второго операнда. Длина второго операнда равна одному байту. Содержимое общего регистра остается без изменения.

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

245

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

доступ (запись в память на место второго операнда).

ЗАПИСЬ В ПАМЯТЬ СИМВОЛОВ ПО МАСКЕ

STCM

 

R1,M3,D2(B2)

 

[RS]

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ BF

 

¦

R1

¦

M3

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

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

12–15. Четыре бита маски соответствуют слева направо четырем позициям байтов общего ре-

гистра, заданного полем R1. Байты, соответствующие единичным битам маски, помещаются в том же порядке в последовательные смежные ячейки памяти, начиная с ячейки. определенной адресом второго операнда. Число записываемых в память байтов равно числу единичных би-

тов маски. Содержимое общего регистра остается без изменения.

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

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

мяти не фиксируются.

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

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

доступ (запись в память на место второго операнда).

ЗАПИСЬ В ПАМЯТЬ ПОКАЗАНИЯ ЧАСОВ

STCK D2(B2)

 

[S]

 

 

+

--------------------------

 

 

 

 

+

¦

B205

¦

B2

¦

D2

¦

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

 

 

 

 

 

+

0

15

16

19

20

 

31

Текущее показание часов записывается в 8-байтовое поле памяти, задаваемое адресом второго операнда, при условии, что часы либо выставлены, либо не выставлены, либо неис-

правны.

Показание часов выражается числом с фиксированной точкой без знака, состоящим из 64

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

писываются нули.

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

Если часы выключены, в поле операнда записываются нули.

246

Достоверность показания часов, записанного в память с помощью данной команды, опреде-

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

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

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

шению к каналам и другим процессорам. После этого производится выборка показания часов.

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

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

0 – часы выставлены;

1 – часы не выставлены;

2 – часы неисправны;

3 – часы стоят или выключены.

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

доступ (запись в память на место операнда).

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

Признак результата, равный 0, обычно показывает, что часы выставлены управляющей про-

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

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

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

текшее с момента включения питания часов. В этом случае показания часов можно использо-

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

чение признака результата, равное 2 или 3, означает, что показания часов, полученные с по-

мощью команды ЗАПИСЬ В ПАМЯТЬ ПОКАЗАНИЯ ЧАСОВ, нельзя использовать для измере-

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

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

ченных часах в полем памяти записываются нули.

К содержимому бита 31 часов прибавляется единица каждые 1,048576 с. Таким образом,

старшее слово часов может обеспечить достаточную разрешающую способность для примене-

ний, предусматривающих участие человека.

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

димо установить стандартное начало отсчета времени (начало “эпохи”), т.е. календарную дату и время, которым соответствует показание часов, равное нулю. В качестве стандартного нача-

ла отсчета рекомендуется принять момент времени, соответствующий 0 ч по Гринвичу 1 янва-

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

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

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

247

мин 53,685248 с по Гринвичу 11 мая 1971 года. Следовательно, в большинстве случаев про-

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

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

ЗАПИСЬ В ПАМЯТЬ ПОЛУСЛОВА

STH

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 40

 

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Содержимое разрядов 16–31 общего регистра, заданного полем R1, без изменения записы-

вается в память по адресу второго операнда. Второй операнд имеет длину два байта.

Содержимое регистра не изменяется.

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

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

доступ (запись в память на место второго операнда).

ЗАПИСЬ В ПАМЯТЬ ГРУППОВАЯ

STM

R1,R3,D2(B2)

[RS]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 90

 

¦

R1

¦

R3

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Содержимое группы общих регистров, начиная с регистра, заданного полем R1, и кончая ре-

гистром, заданным полем R3, записывается в ячейки памяти, начиная с ячейки, заданной адре-

сом второго операнда.

Область памяти, в которую помещается содержимое общих регистров, начинается с ячейки,

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

пись в память содержимого общих регистров производится в порядке возрастания их адресов,

начиная с регистра, заданного полем R1, и кончая регистром, заданным полем R3, включитель-

но. За регистром с адресом 15 следует регистр с адресом 0.

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

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

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

248

ВЫЧИТАНИЕ

 

 

 

 

 

 

 

SR

R1,R2

 

[RR]

 

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

¦

1B

¦

R1

¦

R2

¦

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

0

7

8

11

12

15

 

 

 

 

 

S

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

5B

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Второй операнд вычитается из первого операнда, и разность помещается на место первого операнда.

Вычитание представляет собой сложение первого операнда с обратным кодом второго опе-

ранда с добавлением единицы к младшему биту. Кок и при выполнении команды СЛОЖЕНИЕ,

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

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

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

0– разность равна нулю;

1– разность меньше нуля;

2– разность больше нуля;

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

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

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

переполнение с фиксированной точкой.

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

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

Если поля R1 и R2 в формате RR задают один и тот же регистр, вычитание эквивалентно очистке этого регистра.

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

249

ВЫЧИТАНИЕ ПОЛУСЛОВА

 

 

 

 

SH

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

4B

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

ком, состоящее из 16 разрядов, включая знаковый.

Перед вычитанием второй операнд расширяется до 32 битов путем установки значения зна-

кового разряда в 16 старших битов.

Вычитание представляет собой сложение первого операнда с обратным кодом расширенно-

го второго операнда при одновременном добавлении единицы к младшему биту. Как и при вы-

полнении команды СЛОЖЕНИЕ, в операции участвуют все 32 разряда каждого операнда. Если переносы из знакового бита и старшего бита целой части одновременно либо отсутствуют, ли-

бо присутствуют, то это говорит о том, что вычитание выполнено нормально. Наличие перено-

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

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

0– разность равна нулю;

1– разность меньше нуля;

2– разность больше нуля;

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

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

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

переполнение с фиксированной точкой.

ВЫЧИТАНИЕ КОДОВ

SLR

R1,R2

 

[RR]

 

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

¦

1F

¦

R1

¦

R2

¦

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

0

7

8

11

12

15

 

 

 

 

 

SL

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

5F

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

250

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