- •90 Stm Запись в память групповая.
- •98 Lm Загрузка групповая
- •92 Mvi Пересылка непосредственная
- •91 Тм Проверить по маске
- •45 Bal Переход с возвратом (rx)
- •05 Balr Переход с возвратом (rr)
- •46 Вст Переход по счетчику (rx)
- •06 Bctr Переход по счетчику (rr)
- •86 Вхн___Переход индекс больше (rs)
- •87 Bxle Переход индекс меньше или равен (rs)
- •41 La Загрузка адреса (rx)
- •93 Ts Проверить и установить (si)
- •08 Ssk Установить ключ памяти (rr).
- •09 Isk Прочитать ключ памяти (rr).
45 Bal Переход с возвратом (rx)
05 Balr Переход с возвратом (rr)
Правые 32 бита PSW (содержащие код длины команды 1 для BALR и 2 для BAL, признак результата, маску программы и адрес команды, следующей за BAL или BALR) загружаются в общий регистр R1.
Если используется команда BAL, то происходит безусловный переход к команде, определяемой исполнительным адресом
Е2 = D2 + (Х2) + (В2).
Если используется команда BALR и R20, происходит переход по адресу, определяемому правыми 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
Некоторые дополнительные команды
В этом разделе будут рассмотрены несколько команд, не составляющих единую группу.
