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

IBM370

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

задано в битах 8–31 регистра R1+1. Если второй операнд короче первого, то в оставшиеся младшие позиции байтов первого операнда помещается символ-заполнитель.

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

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

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

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

изводится с использованием логических адресов операндов. Если перекрытие операндов яв-

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

ный 3.

Второй операнд может пересекать верхнюю границу основной памяти, т.е. содержать ячей-

ку с максимальным адресом 16 777 215, за которой следует ячейка с адресом 0, или же не пе-

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

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

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

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

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

го байта второго операнда и одновременно больше адреса самого младшего байта второго операнда, участвующего в операции.

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

Если значение счетчика, находящееся в битах 8–31 регистра R1+1, равно нулю, пересылка не производится, а признак результата устанавливается равным 0 или 1 в зависимости от со-

отношения значений счетчиков.

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

ния элемента операции, не являющегося последним, содержимое регистров R1+1 и R2+1

уменьшается на число пересланных байтов, а содержимое регистров R1 и R2 увеличивается на это же число, так что при повторном выполнении команда пересылки возобновляется с точки прерывания. При прерывании старшие байты в регистрах R1 и R2 устанавливаются равными нулю; значения старших байтов в регистрах R1+1 и R2+1 остаются без изменения, а значение признака результата непредсказуемо. Если операция прервана во время засылки символов-

заполнителей, то поле счетчика в регистре R2+1 равно нулю, адрес в регистре R2 увеличен на первоначальное значение счетчика в регистре R2+1, а значения в регистрах R1 и R1+1 отража-

ют степень заполнения.

231

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

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

При завершении операции счетчик в регистре R1+1 устанавливается равным нулю, а адрес в регистре R1 увеличивается на первоначальное значение счетчика в регистре R1+1. Значение счетчика в регистре R2+1 уменьшается на число байтов, пересланных из поля второго операн-

да, а адрес в регистре R2 увеличивается на это же число. Содержимое битов 0–7 регистров R1

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

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

жимое битов 0–7 регистров R1+1 и R2+1 остается без изменения.

Если счетчик, заданный в битах 8–31 регистра R1+1, равен нулю или устанавливается при-

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

Если счетчик, заданный в битах 8–31 регистра R2+1, равен нулю, то не фиксируются никакие особые случаи доступа к ячейкам второго операнда. Аналогично, если второй операнд больше первого, то не фиксируются возможные особые случаи доступа, связанные с избыточной ча-

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

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

0 – счетчики первого и второго операндов равны;

1– счетчик первого операнда меньше;

2– счетчик второго операнда больше;

3– пересылка не производилась из-за разрушающего перекрытия операндов.

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

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

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

Команда ПЕРЕСЫЛКА ДЛИННАЯ может быть использована для очистки памяти. Для этого нужно в качестве символа-заполнителя взять байт, содержащий только нули, и задать нулевое значение счетчика длины второго операнда.

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

Если поля R1 и R2 данной команды задают одну и ту же пару регистров, операция выполня-

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

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

Поскольку выполнение команды ПЕРЕСЫЛКА ДЛИННАЯ может быть прервано, ее нельзя использовать в ситуациях, которые предполагают непрерываемое выполнение данной коман-

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

же не следует допускать, чтобы сама команда ПЕРЕСЫЛКА ДЛИННАЯ была расположена в

232

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

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

Если команда ПЕРЕСЫЛКА ДЛИННАЯ должна выполняться с помощью команды ВЫПОЛНИТЬ, необходимо принимать специальные меры предосторожности, которые обсуж-

даются в замечаниях по программированию для команды ВЫПОЛНИТЬ.

Если кнопка “стоп” будет нажата во время выполнения команды ПЕРЕСЫЛКА ДЛИННАЯ или команды СРАВНЕНИЕ КОДОВ ДЛИННОЕ, процессор перейдет в состояние “стоп” после за-

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

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

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

ПЕРЕСЫЛКА ЦИФР

MVN

D1(L,B1),D2(B2)

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

+

¦ D1

 

¦

L

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

31

32

35

36

 

47

Младшие 4 бита каждого байта из поля второго операнда (цифры) помещаются в младшие биты соответствующих байтов в поле первого операнда. Старшие 4 бита каждого байта в поле первого операнда остаются без изменения.

Каждое поле операнда обрабатывается слева направо. Если операнды перекрываются, ре-

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

ранда.

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

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

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

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

Выполнение команды ПЕРЕСЫЛКА ЦИФР заключается в выборке четырех старших битов каждого байта из поля первого операнда и последующей записи в память модифицированного значения байта. Запись в память конкретного байта не обязательно производится сразу же по-

сле его выборки.

233

ПЕРЕСЫЛКА СО СДВИГОМ

 

 

 

 

 

 

 

MVO

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

 

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ F1

 

¦ L1

¦ L2

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

31

32

35

36

 

47

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

рого операндов не проверяются на допустимость кодов.

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

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

лается.

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

борка не производится.

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

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

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

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

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

ПЕРЕСЫЛКА ЗОН

MVZ

D1(L,B1),D2(B2)

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ D3

 

¦

L

 

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

 

15

16

19

20

31

32

35

36

 

47

Старшие 4 бита каждого байта из поля второго операнда (зоны) помещаются в старшие би-

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

Каждое поле операнда обрабатывается слева направо. Если операнды перекрываются, ре-

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

234

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

ранда.

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

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

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

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

Выполнение команды ПЕРЕСЫЛКА ЗОН заключается в выборке четырех младших битов каждого байта из поля первого операнда и последующей записи в память модифицированного значения байта. Запись в память конкретного байта не обязательно производится сразу же по-

сле его выборки.

УМНОЖЕНИЕ

MR

R1,R2

[RR]

 

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

¦

1C

¦

R1

¦

R2

¦

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

0

7

8

11

12

15

 

 

 

 

 

M

R1,D2(X2,B2)

 

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

5C

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

Как множитель, так и множимое рассматриваются как целые числа со знаком, состоящие из

32 разрядов, включая знаковый. Произведение всегда представляет собой целое число со зна-

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

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

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

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

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

жет.

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

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

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

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

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

235

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

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

Значащая часть произведения обычно содержит 62 разряда или меньше. Только при пере-

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

УМНОЖЕНИЕ ПОЛУСЛОВА

MH

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

4C

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

Как множитель, так и множимое рассматриваются как целые числа со знаком, состоящие из

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

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

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

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

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

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

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

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

Значащая часть произведения обычно содержит 46 разрядов или меньшее их количество,

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

ведение которых имеет 47 значащих битов. Так как в результате выполнения операции запо-

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

чаться от истинного значения знака произведения.

236

ИЛИ

 

 

 

 

 

 

 

 

 

 

 

 

OR

R1,R2

[RR]

 

 

 

 

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

 

 

 

¦

16

¦

R1

¦

R2

¦

 

 

 

 

 

 

 

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

 

 

 

 

 

+

 

 

 

 

 

 

 

0

7

8

11

12

15

 

 

 

 

 

 

 

 

O

R1,D2(X2,B2)

 

[RX]

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

 

 

 

¦

56

¦

R1

¦

X2

¦

B2

¦

D2

¦

 

 

 

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

 

 

 

 

 

 

 

 

 

+

 

 

 

0

7

8

11

12

15

16

19

20

 

31

 

 

 

OI

D1(B1),I2

[SI]

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

+

 

 

 

 

 

¦

96

¦

I2

¦

B1

¦

D1

¦

 

 

 

 

 

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

 

 

 

 

 

 

 

+

 

 

 

 

 

0

7

8

15

16

19

20

 

31

 

 

 

 

 

OC

D1(L,B1),D2(B2)

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

+

¦

D6

¦

L

¦

B1

¦

 

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

 

31

32

35

36

 

47

Поразрядная логическая сумма (ИЛИ) первого и второго операндов помещается на место первого операнда.

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

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

В случае команды OC поля операндов обрабатываются слева направо. Если операнды пе-

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

да.

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

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

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

2– не бывает;

3– не бывает.

237

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

доступ (выборка второго операнда в командах O и OC, выборка и запись в память первого операнда в командах OI и OC).

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

Команда ИЛИ может быть использована для установки некоторого бита в единицу.

Выполнение команд OI и OC состоит в выборке байта первого операнда из основной памяти и последующей записи в память модифицированного значения. Запись конкретного байта не обязательно производится сразу же после его выборки. Поэтому команду ИЛИ нельзя исполь-

зовать для модификации значения в разделяемой ячейке основной памяти без учета возмож-

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

сывается только один байт.

УПАКОВАТЬ

PACK

 

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

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ F2

 

¦

L1

¦ L2

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

31

32

35

36

 

47

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

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

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

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

сылке в поле первого операнда не изменяются. Правильность их кодировки не проверяется.

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

го операнда, не помещающиеся в поле первого операнда, отбрасываются.

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

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

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

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

вый байт второго операнда.

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

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

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

238

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

Команда УПАКОВАТЬ может быть использована для перестановки двух цифр в одном бай-

те. Для этого нужно задать нулевые значения в полях L1 и L2 данной команды и указать один и тот же адрес для обоих операндов.

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

УСТАНОВИТЬ МАСКУ ПРОГРАММЫ

SPM

R1

 

[RR]

 

 

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

 

 

 

 

 

+

¦ 04

 

¦

R1

¦ ////

¦

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

 

 

 

 

 

+

0

7

8

11

12

15

 

Биты 2–7 общего регистра, заданного полем R1, замещают биты признака результата и мас-

ки программы в текущем PSW. Биты 12–15 кода данной команды игнорируются.

Биты 0–1 и 8–31 регистра, заданного полем R1, игнорируются. Содержимое самого регистра остается без изменения.

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

нии “задача”, так и в состоянии “супервизор”.

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

заданного полем R1.

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

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

В позиции 2–7 общего регистра содержимое полей признака результата и маски программы из PSW может быть перенесено с помощью команды ПЕРЕХОД С ВОЗВРАТОМ.

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

SLDA

 

R1,D2(B2)

 

[RS]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ 8F

 

¦

R1

¦ ////

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

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

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

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

239

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

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

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

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

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

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

носятся нули.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

зя.

Если в команде арифметического двойного сдвига указана величина сдвига, равная нулю,

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

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

вать команду ЗАГРУЗКА И ПРОВЕРКА, так как она занимает меньше памяти и на многих моде-

лях ЭВМ выполняется быстрее.

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

личины сдвига отсутствует.

240

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