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

IBM370

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

XC

D1(L,B1),D2(B2)

 

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

+

¦

D7

¦

L

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

31

32

35

36

 

47

Поразрядная сумма по модулю 2 (ИСКЛЮЧАЮЩЕЕ ИЛИ) первого и второго операндов по-

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

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

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

чае этот бит результата устанавливается в нуль.

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

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

да.

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

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

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

2– не бывает;

3– не бывает.

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

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

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

Команда ИСКЛЮЧАЮЩЕЕ ИЛИ может быть использована для инвертирования бита – опе-

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

Если и первый, и второй операнды команды ИСКЛЮЧАЮЩЕЕ ИЛИ являются одним и тем же полем, то после выполнения операции все биты этого поля будут равны нулю.

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

нием команды ИСКЛЮЧАЮЩЕЕ ИЛИ. Сначала выполняется команда ИСКЛЮЧАЮЩЕЕ ИЛИ,

для которой поле A является первым операндом, а поле B – вторым. Затем выполняется такая же команда, для которой поле B, содержащее свое первоначальное значение, является пер-

вым операндом, а поле A, содержащее результат предыдущей операции, – вторым операндом.

После этого выполняется еще одна команда ИСКЛЮЧАЮЩЕЕ ИЛИ, для которой поле A, со-

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

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

221

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

тельно производится сразу же после его выборки. Отсюда следует, что команда ИСКЛЮЧАЮЩЕЕ ИЛИ не может использоваться для обновления содержимого разделяемой ячейки основной памяти без учета возможных непредвиденных последствий, если существует вероятность того, что другой процессор в это время может производить изменение содержимо-

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

ВЫПОЛНИТЬ

EX

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

44

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

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

Модификация проводится путем логического сложения битов 8–15 кода команды, указанной адресом перехода, с битами 24–31 общего регистра, заданного полем R1. Исключение состав-

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

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

Выполнение команды, на которую указывает команда ВЫПОЛНИТЬ, и обработка особых случаев производятся точно так же, как если бы указанная команда встретилась в обычной по-

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

Адрес команды в текущем PSW увеличивается на длину команды ВЫПОЛНИТЬ. Этот про-

двинутый адрес и код длины команды ВЫПОЛНИТЬ, равный 2, используются в качестве части информации для возврата в том случае, если команда ВЫПОЛНИТЬ указывает на команду ПЕРЕХОД С ВОЗВРАТОМ. Если команда ВЫПОЛНИТЬ указывает на команду перехода и усло-

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

сом перехода, заданным в указанной команде.

Если команда, на которую указывает команда ВЫПОЛНИТЬ, является также командой ВЫПОЛНИТЬ, фиксируется особый случай, относящийся к команде ВЫПОЛНИТЬ, и операция подавляется. Исполнительный адрес, заданный в команде ВЫПОЛНИТЬ, должен быть четным;

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

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

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

222

команда ВЫПОЛНИТЬ указывает на команду ВЫПОЛНИТЬ;

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

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

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

Наличие модификации команды, указанной в команде ВЫПОЛНИТЬ, с помощью 8 разрядов из общего регистра позволяет косвенным путем задавать длину, индекс, маску, непосредствен-

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

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

Особый случай адресации или спецификации может быть вызван как самой командой ВЫПОЛНИТЬ, так и командой, на которую она указывает.

Если команда ВЫПОЛНИТЬ должна быть применена для выполнения прерываемой коман-

ды и если при выполнении последней изменяется содержимое некоторых общих регистров, то обычно не следует задавать эти регистры в полях R1, X2 или B2 команды ВЫПОЛНИТЬ, так как при возобновлении выполнения после прерывания или в случае повторной выборки команды в отсутствие прерывания команда ВЫПОЛНИТЬ будет использовать обновленное содержимое регистров, задаваемых полями R1, X2 или B2. Обычно не следует также допускать, чтобы сама команда ВЫПОЛНИТЬ была расположена в ячейках результата прерываемой команды, на ко-

торую она указывает, так как для возобновления выполнения может потребоваться повторная выборка и расшифровка команды ВЫПОЛНИТЬ.

ПРОЧИТАТЬ СИМВОЛ

IC

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

43

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

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

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

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

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

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

ПРОЧИТАТЬ СИМВОЛЫ ПО МАСКЕ

ICM

R1,M3,D2(B2)

[RS]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦ BF

 

¦

R1

¦

M3

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

223

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

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

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

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

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

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

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

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

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

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

ти: если этот бит равен единице, признак результата устанавливается равным 1, чтобы отра-

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

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

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

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

0 – все прочитанные биты равны нулю или маска равна нулю;

1 – первый бит прочитанного поля равен единице;

2 – первый бит прочитанного поля равен нулю и не все прочитанные биты равны нулю;

3 – не бывает.

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

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

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

Правила установки признака результата для команды ПРОЧИТАТЬ СИМВОЛЫ ПО МАСКЕ таковы, что если маска задана комбинацией 1111, то выполнение команды приводит к установ-

ке такого же признака результата, как и в случае команды ЗАГРУЗКА И ПРОВЕРКА.

ЗАГРУЗКА

LR

R1,R2

 

[RR]

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

 

 

 

 

+

¦

18

¦

R1

¦

R2 ¦

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

 

 

 

 

+

0

7

8

11

12

15

224

L

R 1 ,D 2 (X 2 ,B 2 )

 

[RX]

 

 

 

 

+

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

 

 

 

 

 

 

 

 

+

¦

58

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

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

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

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

ЗАГРУЗКА АДРЕСА

LA

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

41

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

Адрес, заданный полями X2, B2 и D2, помещается в биты 8–31 общего регистра, заданного полем R1. В биты 0–7 этого регистра записываются нули. Вычисление адреса происходит по правилам адресной арифметики.

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

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

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

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

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

В полях R1, X2 и B2 можно задавать один и тот же общий регистр. Исключение составляет общий регистр 0, который может быть указан только в поле R1. Таким образом, к младшим 24

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

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

должен быть задан в поле R1, а также либо в поле X2 (с B2, равным нулю), либо в поле B2 (с X2,

равным нулю).

ЗАГРУЗКА И ПРОВЕРКА

LTR

R1,R2

 

[RR]

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

 

 

 

 

+

¦ 12

 

¦

R1

¦

R2 ¦

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

 

 

 

 

+

0

7

8

11

12

15

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

225

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

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

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

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

3– не бывает.

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

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

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

ранда без перемещения данных.

ЗАГРУЗКА ДОПОЛНЕНИЯ

LCR

R1,R2

 

[RR]

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

 

 

 

 

+

¦ 13

 

¦

R1

¦

R2 ¦

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

 

 

 

 

+

0

7

8

11

12

15

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

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

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

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

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

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

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

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

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

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

ЗАГРУЗКА ПОЛУСЛОВА

LH

R1,D2(X2,B2)

[RX]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

48

¦

R1

¦

X2

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

байта и рассматривается как целое число со знаком, состоящее из 16 битов, включая знако-

вый.

226

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

производится его расширение до 32 битов путем распространения значения знакового разряда на 16 старших битов.

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

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

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

ЗАГРУЗКА ГРУППОВАЯ

LM

R1,R3,D2(B2)

[RS]

 

 

 

 

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

 

 

 

 

 

 

 

 

 

+

¦

98

¦

R1

¦

R3

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

 

31

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

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

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

чтобы загрузить указанные регистры. Общие регистры загружаются в порядке возрастания их адресов, начиная с регистра, заданного полем R1, и кончая регистром, заданным полем R3. При этом за регистром с адресом 15 следует регистр с адресом 0.

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

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

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

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

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

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

данный в поле R3, меньше адреса, заданного в поле R1, последовательность используемых ре-

гистров проходит через 15 и 0.

ЗАГРУЗКА ОТРИЦАТЕЛЬНАЯ

LNR

R1,R2

 

[RR]

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

 

 

 

 

+

¦ 11

 

¦

R1

¦

R2 ¦

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

 

 

 

 

+

0

7

8

11

12

15

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

го операнда.

227

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

ные числа остаются без изменения. Нуль, имеющий положительный знак, остается без изме-

нения.

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

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

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

2– не бывает;

3– не бывает.

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

ЗАГРУЗКА ПОЛОЖИТЕЛЬНАЯ

LPR

R1,R2

 

[RR]

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

 

 

 

 

+

¦ 10

 

¦

R1

¦

R2 ¦

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

 

 

 

 

+

0

7

8

11

12

15

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

При выполнении операции над отрицательными числами берется их дополнение; положи-

тельные числа остаются без изменения.

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

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

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

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

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

1– не бывает;

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

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

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

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

ОБРАЩЕНИЕ К МОНИТОРУ

MC

D1(B1),I2

[SI]

 

 

 

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

 

 

 

 

 

 

 

+

¦

AF

¦

I2

¦

B1

¦

D1

¦

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

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

 

31

Эта команда вызывает программное прерывание, если соответствующий бит маски монито-

ра в управляющем регистре 8 равен единице.

228

Разряды 12–15 поля I2 содержат двоичное число, задающее один из 16 классов монитора.

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

вается в ячейку 149 основной памяти; в ячейку 148 записываются нули. Бит 9 кода программно-

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

Адрес, заданный полями B1 и D1, представляет собой код обращения к монитору, который помещается в ячейки 157–159. Вычисление адреса происходит по правилам адресной ариф-

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

водятся. В ячейку 156 записываются нули.

Если бит маски монитора, соответствующий классу, заданному разрядами 12–15 кода дан-

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

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

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

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

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

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

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

мер, с помощью команды ОБРАЩЕНИЕ К МОНИТОРУ, вставленных в программы, можно накапливать информацию слежения, показывающую, какие программы выполнялись: учетную информацию, показывающую частоту использования отдельных программ, и информацию об использовании времени, показывающую продолжительность выполнения отдельных программ.

С каждой командой ОБРАЩЕНИЕ К МОНИТОРУ может быть связана определенная описа-

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

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

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

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

вождается кодом, состоящим из 24 битов.

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

щения к монитору или разрешать такие обращения во всех или только в некоторых классах.

ПЕРЕСЫЛКА

MVI

D1(B1),I2

 

[SI]

 

 

 

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

 

 

 

 

 

 

 

+

¦ 92

 

¦

I2

¦

B1

¦

D1

¦

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

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

 

31

229

MVC

D1(L,B1),D2(B2)

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ D2

 

¦

L

 

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

 

15

16

19

20

31

32

35

36

 

47

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

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

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

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

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

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

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

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

ранда в командах MVI и MVC).

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

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

ПЕРЕСЫЛКА ДЛИННАЯ

MVCL

 

R1,R2

[RR]

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

 

 

 

 

+

¦ 0E

 

¦

R1

¦

R2 ¦

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

 

 

 

 

+

0

7

8

11

12

15

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

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

заполнитель.

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

Адреса самых левых байтов первого и второго операндов находятся в битах 8–31 общих ре-

гистров, заданных полями R1 и R2 соответственно. Длины операндов в байтах содержатся в би-

тах 8–31 общих регистров с номерами R1+1 и R2+1. Биты 0–7 регистра R2+1 содержат символ-

заполнитель, а содержимое битов 0–7 регистров R1, R1+1 и R2 игнорируется.

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

чивается после того, как в поле первого операнда переслано такое количество байтов, которое

230

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