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

IBM370

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

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

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

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

в операции участвуют все 32 разряда каждого операнда; значение знакового бита результата после операции не изменяется. Данная команда отличается от команды ВЫЧИТАНИЕ отсут-

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

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

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

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

0 – не бывает;

1 – разность не равна нулю и перенос отсутствует;

2 – разность равна нулю и есть перенос;

3 – разность не равна нулю и есть перенос.

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

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

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

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

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

ОБРАЩЕНИЕ К СУПЕРВИЗОРУ

SVC

I

 

[RR]

 

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

 

 

 

+

¦

0A

¦

I

¦

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

 

 

 

+

0

7

8

15

 

Данная команда вызывает прерывание при обращении к супервизору; код прерывания за-

дается полем I.

Содержимое битов 8–15 кода данной команды вместе с присоединенными к нему 8 старши-

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

вается в память во время прерывания. Старое PSW записывается в ячейку 32, а новое PSW

выбирается из ячейки 96. Команда допустима как в состоянии “задача”, так и в состоянии “су-

первизор”.

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

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

251

ПРОВЕРИТЬ И УСТАНОВИТЬ

 

 

TS

D2(B2)

[S]

 

 

 

 

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

 

 

 

 

 

 

 

+

¦

93

¦ ////// ¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

 

31

В зависимости от значения крайнего левого разряда (бит 0) в байте, расположенном по ад-

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

рируются.

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

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

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

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

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

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

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

0 – крайний левый бит указанного байта равен нулю;

1 – крайний левый бит указанного байта равен единице;

2 – не бывает;

3 – не бывает.

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

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

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

Команда ПРОВЕРИТЬ И УСТАНОВИТЬ может применяться для управляемого совместного использования общей области памяти несколькими программами. В этих целях бит 0 какого-

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

ли в указанном бите находится нуль, и что она уже находится в использовании, если в этом би-

те находится единица. Перед тем как обратиться к общей области, каждая программа обязана проверить байт с управляющим битом с помощью команды ПРОВЕРИТЬ И УСТАНОВИТЬ. Ес-

ли в результате проверки устанавливается признак результата 0, область можно использовать;

если этот признак равен 1, использование области не разрешается. Поскольку команда ПРОВЕРИТЬ И УСТАНОВИТЬ запрещает доступ другого процессора к указанному байту между моментами выборки (для проверки) и записи в память байта, состоящего из единиц (установка),

252

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

Следует заметить, что команда ПРОВЕРИТЬ И УСТАНОВИТЬ не обеспечивает блокировки доступа каналов к памяти.

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

TM

D1(B1),I2

[SI]

 

 

 

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

 

 

 

 

 

 

 

+

¦

91

¦

I2

¦

B1

¦

D1

¦

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

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

 

31

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

чтобы установить признак результата.

Байт данных, находящийся непосредственно в поле I2, используется как 8-разрядная маска.

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

да.

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

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

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

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

мяти не изменяется.

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

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

1 – среди выделенных битов есть и нули, и единицы;

2 – не бывает;

3 – все выделенные биты равны единице.

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

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

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

TR

D1(L,B1),D2(B2)

 

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

+

¦

DC

¦

L

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

15

16

19

20

31

32

35

36

 

47

253

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

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

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

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

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

ривается как целое число без знака, состоящее из 8 разрядов, и дополняется старшими нуля-

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

ет исходный байт-аргумент.

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

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

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

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

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

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

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

Команда ПЕРЕКОДИРОВАТЬ может быть использована для преобразования данных из од-

ного кода в другой.

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

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

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

ном порядке.

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

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

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

TRT

D1(L,B1),D2(B2)

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ DD

 

¦

L

 

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

 

15

16

19

20

31

32

35

36

 

47

254

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

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

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

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

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

дующего байта-аргумента. Если байт-функция – не нуль, то операция заканчивается; при этом адрес соответствующего аргумента помещается в общий регистр 1, а байт-функция – в общий регистр 2.

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

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

ким же образом, как при выполнении команды ПЕРЕКОДИРОВАТЬ. Затем производится про-

верка этого байта на равенство нулю.

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

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

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

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

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

вался последним. Содержимое старших 8 разрядов регистра 1 не изменяется. Байт-функция помещается в младшие 8 разрядов общего регистра 2. Содержимое битов 0–23 общего реги-

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

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

0– все байты-функции равны нулю;

1– ненулевая байт-функция обнаружена до окончания поля первого операнда;

2– ненулевая байт-функция соответствует последнему байту-аргументу;

3– не бывает.

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

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

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

Команда ПЕРЕКОДИРОВАТЬ И ПРОВЕРИТЬ может быть использована для просмотра пер-

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

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

255

РАСПАКОВАТЬ

 

 

 

 

 

 

 

 

 

 

UNPK

 

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

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦ F3

 

¦ L1

¦ L2

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

31

32

35

36

 

47

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

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

няются. К каждой цифре слева добавляется зона 1111, и таким образом формируется байт ре-

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

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

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

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

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

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

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

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

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

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

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

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

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

младшая позиция первого операнда должна находиться правее младшей позиции второго опе-

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

256

_лава 10. Команды обработки десятичных данных

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

ботки десятичных данных.

10.1.Формат данных

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

Зонный формат

Z

N

Z

N

.

Z

N

Z

N

.. /S

В зонном формате 4 младших бита байта называются числовыми и обычно содержат код,

представляющий десятичную цифру. Старшие 4 бита называются зоной; исключение состав-

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

Упакованный формат

D

D

D

D

.

D

D

D

S

..

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

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

мещен знак числа.

И цифры, и знак представлены в виде 4-разрядных кодов.

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

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

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

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

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

ствах вывода.

Команды ПЕРЕСЫЛКА ЗОН и ПЕРЕСЫЛКА ЦИФР обеспечивают работу с данными, пред-

ставленными в зонном формате. Команда УПАКОВАТЬ преобразует данные из зонного форма-

та в упакованный, а команда РАСПАКОВАТЬ выполняет обратное преобразование. Эти коман-

ды не относятся к средствам обработки десятичных данных и описаны в главе 9. Команды ОТРЕДАКТИРОВАТЬ и ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ могут быть также использованы для перевода данных из упакованного формата в формат с зоной.

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

257

Поля, которые они занимают, могут начинаться с любого байта и иметь длину от 1 до 16

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

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

лями слева от старшей цифры.

Однако результат не превышает размера поля первого операнда, указанного в команде. Ко-

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

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

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

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

вершения операции.

Во всех командах обработки десятичных данных, за исключением команд ОТРЕДАКТИРОВАТЬ и ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ, любо поля операндов не должны перекрываться, либо у них должны совпадать самые правые байты. В команде СЛОЖЕНИЕ С ОЧИСТКОЙ поля операндов могут перекрываться, но при этом самый правый байт первого операнда должен находиться правее самого правого байта второго операнда; при правильном перекрытии операндов результат будет получен такой же, как если бы операнды обрабатыва-

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

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

сказуемым результатам.

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

мещено промежуточное значение, отличное от исходного операнда и конечного результата.

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

ращаются к одному и тому же операнду, результат операции для таких команд, как СЛОЖЕНИЕ ДЕСЯТИЧНОЕ, будет непредсказуем.

10.2.Представление чисел

Числа представляются в виде выровненных по правым границам поля целых чисел в пря-

мом коде со знаком плюс или минус.

Цифры 0–9 имеют соответственно двоичные коды 0000–1001. Коды 1010–1111 используют-

ся только как коды знака, причем коды 1010, 1100, 1110 и 1111 рассматриваются как плюс, а

коды 1011 и 1101 – как минус. Коды 0000–1001 недопустимы в качестве кодов знака. Когда об-

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

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

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

258

Несмотря на то что знак в операнде может быть представлен различными кодами, в поле результата (поле первого операнда) операций десятичной арифметики (СЛОЖЕНИЕ ДЕСЯТИЧНОЕ, ДЕЛЕНИЕ ДЕСЯТИЧНОЕ, УМНОЖЕНИЕ ДЕСЯТИЧНОЕ, СДВИГ С ОКРУГЛЕНИЕМ ДЕСЯТИЧНЫЙ, ВЫЧИТАНИЕ ДЕСЯТИЧНОЕ и СЛОЖЕНИЕ С ОЧИСТКОЙ)

плюс кодируется в виде 1100, минус – в виде 1101.

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

левое число позиций. Команды редактирования и команда РАСПАКОВАТЬ вырабатывают код зоны 1111.

10.3.Команды

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

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

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

Примечание. При детальном описании каждой команды ее мнемоника и символическое представление операндов даны на языке Ассемблера Системы 370. Например, для команды СЛОЖЕНИЕ ДЕСЯТИЧНОЕ мнемоника – AP, формат операндов – D1(L1,B1),D2(L2,B2).

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

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

ных данных.

Таблица 10.1

Команды обработки десятичных данных

Название

Мнемо-

 

Характеристики

 

 

 

 

ническое

 

 

 

 

 

од

 

обозначение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

AP

 

 

 

 

 

 

 

 

S

D

F

 

T

A

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

CP

 

 

 

 

 

 

 

 

S

D

 

 

 

9

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

DP

 

 

 

 

 

 

 

 

S

D

P

K

T

D

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

ED

 

 

 

 

 

 

 

 

S

D

 

 

T

E

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

EDMK

 

 

 

 

 

 

ОТМЕТИТЬ

 

S

D

 

 

T

F

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

MP

 

 

 

 

 

 

 

 

S

D

P

 

T

C

СДВИГ С ОКРУГЛЕНИЕМ

SRP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

259

Название

Мнемо-

 

Характеристики

 

 

 

ническое

 

 

 

 

од

 

обозначение

 

 

 

 

 

 

 

 

 

 

 

 

ДЕСЯТИЧНЫЙ

 

S

D

F

T

0

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

SP

 

 

 

 

 

 

 

S

D

F

T

B

СЛОЖЕНИЕ С ОЧИСТКОЙ

ZAP

 

 

 

 

 

 

 

S

D

F

T

8

 

 

 

 

 

 

 

Обозначения:

A – особый случай доступа к памяти;

C– устанавливается признак результата;

D– особый случай в данных;

DF – десятичное переполнение;

DK – особый случай десятичного деления;

PD – средство обработки десятичных данных;

R – событие, связанное с изменением содержимого общего регистра;

SP – особый случай спецификации;

SS – формат SS;

ST – событие, связанное с изменением содержимого основной памяти.

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

 

 

 

 

 

 

 

AP

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

[SS]

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

¦

FA

¦ L1

¦ L2

¦

B1

¦

D1

¦

B2

¦

D2

¦

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

 

 

 

 

 

 

 

 

 

 

 

 

 

+

0

7

8

11

12

15

16

19

20

31

32

35

36

 

47

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

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

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

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

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

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

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

полнение.

260

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