Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Команды IBM360.doc
Скачиваний:
2
Добавлен:
29.10.2018
Размер:
609.28 Кб
Скачать

45 Bal Переход с возвратом (rx)

05 Balr Переход с возвратом (rr)

Правые 32 бита PSW (содержащие код длины команды 1 для BALR и 2 для BAL, признак результата, маску программы и адрес команды, следующей за BAL или BALR) загружаются в общий регистр R1.

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

Е2 = D2 + (Х2) + (В2).

Если используется команда BALR и R20, происходит переход по адресу, определяемому правыми 24 битами в реги­стре R2.

Если используется команда BALR и R2=0, переход не проис­ходит, и выбирается следующая по порядку команда. Команда BALR в таком виде применяется обычно для установки регистра базы. Команда BALR R1,0 загружает увеличенный на 2 адрес команды BALR в регистр R1; затем выполняется следующая команда. Такая команда BALR обычно ставится в начале про­граммы, а все остальные адреса представляются с помощью сме­щения относительно базового адреса в регистре R1. При такой адресации программа может перемещаться в памяти и при этом будет работать правильно.

46 Вст Переход по счетчику (rx)

06 Bctr Переход по счетчику (rr)

Из содержимого регистра R1 автоматически вычитается 1. Если результат равен 0, выбирается следующая по порядку команда. Если результат не равен 0, происходит переход по адресу E2; в случае команды ВСТ, и по адресу, который задается в реги­стре R2, в случае команды BCTR. Если в команде BCTR Rg = О, переход не происходит. Таким образом, команда BCTR с R2=0 может быть использована для уменьшения счетчика без перехода.

Команду Переход по счетчику удобно использовать в тех случаях, когда нужно повторить несколько раз один и тот же набор команд. Предположим, что требуется написать программу, которая складывает 20 чисел, X1, …, Х20, расположенных в памяти, и помещает результат в регистр 3. Исходная информа­ция и программа могут быть расположены в памяти следующим образом:

008700–03 X1

008704–07 Х2

00874C-4F Х20

008800 BALR 05 60

008802 SR 1В 33

008804 L 58 20 6016

008808 LH 48 50 601A

00880C A 5A 34 2000

008810 SH 4B 20 601С

008814 ВСТ 46 50 600А

008818 00 00874С

00881С 0014 (=20)

00881Е 0004

Имеются две команды формата RS, с помощью которых облег­чается программирование циклов (так, в нашей программе команды А, SH, ВСТ образуют цикл и выполняются несколько раз).

86 Вхн___Переход индекс больше (rs)

87 Bxle Переход индекс меньше или равен (rs)

Эти две команды выполняются следующим образом:

1. Содержимое регистров R1 и R3 складывается, и результат помещается в регистр R1, замещая предыдущее содержимое этого регистра.

2. Новое содержимое регистра R1 сравнивается с содержи­мым регистра R3 или R3+1 (выбирается регистр с нечетным номером).

3. Переход происходит, если (R1) > (R3 или R3+1) в слу­чае команды ВХН, или, если (R1)  (R3 или R3+1), в случае команды BXLE.

Если R3 – регистр с нечетным номером, то при выполнении шагов 1 и 2 команды используют регистр R3; но обычно R3 являет­ся регистром с четным номером, так что команды используют три регистра R1, R3 и R3+1.

С помощью этих команд можно упростить последний пример так:

008700-03 X1

00874C-4F Х20

008800 BALR 05 60

02 LM 98 25 600E

06 A 5A 30 2000

0A BXLE 87 24 6004

008810 00008700

14 00000000

18 00000004

1C 0000874C

Отметим также, что мы использовали команду LM для того. чтобы загрузить адрес числа X1 в регистр 2, начальное нулевое значение суммы в регистр 3, приращение, равное 4, в регистр 4 и адрес Х20 (константу сравнения) в регистр 5.

Команды сдвига

Сдвиг – это операция смещения всех битов регистра на одну или несколько позиций вправо или влево. Сдвиг вправо на один бит эквивалентен делению содержимого на 2, а сдвиг влево на один бит эквивалентен умножению содержимого на 2. Команды сдвига все имеют формат RS:

Код операции

R1

////

B2

D2

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

Команды сдвига:

Код операции

Направление

Точность

Тип

88 SRL

вправо

обычная

логическая

89 SLL

влево

обычная

логическая

8А SRA

вправо

обычная

арифметическая

8В SLA

влево

обычная

арифметическая

8С SRDL

вправо

удвоенная

логическая

8D SLDL

влево

удвоенная

логическая

8Е SRDA

вправо

удвоенная

арифметическая

8F SLDA

влево

удвоенная

арифметическая

Точность. В командах с обычной точностью используется один общий регистр R1, содержимое которого и сдвигается. В командах с удвоенной точностью должен указываться регистр с четным номером. Сдвигается содержимое обоих регистров R1 и R1+1, причем содержимое этих регистров рассматрива­ется как одно число, знаковый бит которого находится в реги­стре R1.

Тип. В логических командах сдвига знаковый бит ничем не отличается от прочих, и поэтому перемещаются вправо или влево все 32 или 64 бита; освобождаемые позиции заполняются нулями. В арифметических командах сдвига перемещаются толь­ко 31 или 63 бита, т. е. данные, кроме знака. При сдвигах влево освобождаемые позиции заполняются нулями, а при сдвигах вправо освобождаемые позиции заполняются значением знакового бита, т. е. знаковый бит как бы «размножается».

Признак результата. Арифметические команды сдвига уста­навливают признак результата равным 0, 1 или 2, если резуль­тат равен нулю, меньше нуля или больше нуля соответственно. Признак результата устанавливается равным 3, если при выпол­нении сдвига влево значение разряда, выдвигаемого на место знакового разряда (из позиции 1), отличается от значения послед­него. Логические команды сдвигов не устанавливают признак результата.

Величина сдвига. Шесть самых правых битов исполнительно­го адреса Е2 = D2 + (В2) задают величину сдвига. Отметим. что в этих командах второй адрес воспринимается не как адрес памяти, а как число позиций, на которое должен быть произведен сдвиг. С помощью шести битов можно задать максимальную величину сдвига 63 и минимальную 0. Арифметический сдвиг на 0 позиций может быть использован для проверки знакового бита.

Примеры:

До выполнения команды: Регистр 1 0011 2233

Регистр 2 FF89 7658

Регистр 3 А010 1023

Команда: SRL 88 10 0004

Результат: Регистр 1 0001 1223

Команда: SRA 8A 20 0008

Результат: Регистр 2 FFFF 8976

Команда: SLDL 8D 20 0001

Результат: Регистр 2 FF12 ЕСВ1

Регистр 3 4020 2046

Некоторые дополнительные команды

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