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

Номер варианта

Коды команд

Емкость оперативной памяти, Мб

Длина слова оперативной памяти, байт

Способ адресации микрокоманд

1

1A, 6A, 18, 07

256

4

Принудительная адресация с двумя адресами

2

5A, 2A, 58, 47

128

4

3

4A, 3A, 48, 05

512

4

4

1E, 7A, 12, 45

128

4

5

5E, 2E, 13, 06

256

4

6

1B, 6E, 10, 46

512

4

7

5B, 3E, 11, 86

128

4

8

4B, 7E, 98, 87

256

4

9

1F, 6B, 50, 44

512

4

10

5F, 2B, 40, 82

128

4

11

19, 7B, 90, 0A

256

4

12

59, 3B, 28, 07

512

4

13

49, 2F, 68, 47

128

4

14

1B, 6C, 38, 05

256

4

15

2C, 5C, 78, 45

512

4

16

4C, 3C, 22, 06

128

4

17

1D, 6D, 46, 32

256

4

18

5D, 2D, 23, 86

512

4

19

4F, 34, 33, 87

128

4

20

4E, 24, 21, 44

256

4

21

8B, 6F, 20, 82

512

4

Принудительная адресация с двумя сокращенными адресами

22

8A, 7F, 30, 0A

128

4

23

8F, 3F, 31, 07

256

4

24

8E, 3D, 60, 47

512

4

25

55, 29, 70, 05

128

4

26

15, 69, 43, 45

256

8

27

95, 39, 42, 06

512

8

28

14, 79, 41, 46

128

8

29

16, 7C, 18, 86

256

8

30

17, 7D, 58, 87

512

8

31

54, 2A, 48, 44

128

8

32

94, 3A, 12, 82

256

8

33

56, 2E, 13, 0A

512

8

34

96, 3E, 10, 07

128

8

35

57, 7E, 11, 47

256

8

36

97, 2B, 98, 05

512

8

37

89, 3B, 50, 45

128

8

38

88, 2F, 40, 06

256

8

39

8C, 2C, 28, 86

512

8

40

89, 3F, 90, 45

128

8

41

1D, 6A, 66, 87

256

8

Формирование адресов по одному условию

42

1C, 7A, 38, 44

512

8

43

19, 6E, 78, 82

128

8

44

1F, 6B, 22, 0A

256

8

45

1B, 7B, 32, 07

512

8

46

1E, 6F, 23, 47

128

8

47

1A, 7F, 33, 05

256

8

48

17, 6C, 21, 45

512

8

49

16, 7C, 20, 06

128

8

50

14, 7D, 30, 46

256

8

51

1A, 6A, 30, 46

512

4

52

5A, 2A, 20, 06

128

4

53

4A, 3A, 21, 45

256

4

54

1E, 7A, 33, 05

512

4

55

5E, 2E, 23, 47

128

4

56

1B, 6E, 32, 07

256

4

57

5B, 3E, 22, 0A

512

4

58

4B, 7E, 78, 82

128

4

59

1F, 6B, 38, 44

256

4

60

5F, 2B, 68, 87

512

4

61

19, 7B, 28, 86

128

4

Формирование адресов по двум условиям

62

59, 3B, 90, 46

256

4

63

49, 2F, 40, 06

512

4

64

1C, 6C, 50, 45

128

4

65

5C, 2C, 98, 05

256

4

66

4C, 3C, 11, 47

512

4

67

1D, 6D, 10, 07

128

4

68

5D, 2D, 13, 0A

256

4

69

4F, 34, 12, 82

512

4

70

4E, 24, 48, 44

128

4

71

8B, 6F, 58, 87

256

4

72

8A, 7F, 18, 86

512

4

73

8F, 3F, 41, 46

128

4

74

8E, 3D, 42, 06

256

4

75

55, 29, 43, 45

512

4

Команды IBM-360

Машины системы IBM-360 являются вычислительными маши­нами с хранимой в памяти программой, т. е. команды, которые должны быть выполнены, хранятся в памяти так же, как числа и данные, над которыми выполняются действия. Команда содер­жит: код операции (сокращенно ОР), указывающий ту операцию, которая должна быть выполнена; затем два адреса, определяющие данные, или операнды, участвующие в этой операции. Схемати­чески команду IBM-360 можно представить так:

Код операции

Адрес операнда 1

Адрес операнда 2

Операнды могут находиться как в основной памяти, так и в ре­гистрах.

Для кода операции отводятся две шестнадцатеричные цифры (один байт). Из возможных 256 различных операций в действи­тельности используются 143. Для задания регистра требуется одна шестнадцатеричная цифра, так как в машине имеются только шестнадцать регистров. Если оба операнда хранятся в регистрах. команда имеет следующий вид:

Байт

0

1

ОР

R1

R2

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

Адреса ячеек основной памяти задаются сложнее. Поскольку мы должны уметь записать адрес каждого из 16 миллионов байтов, потребуется шесть шестнадцатеричных цифр; в действительности средний объем памяти равен 32 тысячам байтов, т. е. первые две шестнадцатеричные цифры адреса, как правило, нулевые. Для экономии памяти, которая достаточно дорога, желательно хранить команды в возможно более сжатом виде. В машине IBM-360 адреса основной памяти задаются в виде:

Х В DDD,

или в виде

В DDD,

где В и Х — шестнадцатеричные цифры, либо равные 0, либо указывающие один из общих регистров с номерами от 1 до 15. DDD — три шестнадцатеричные цифры, называемые смещением. Регистр Х называется индексным регистром, а его содержимое — индексом. Регистр В называется базовым регистром, а его содер­жимое — базовым адресом или базой. Если В = 0, то это указывает не на содержимое общего регистра 0, а на нулевое значение базо­вого адреса. В случае, когда Х = 0, мы говорим об отсутствии индексации.

Адрес основной памяти формируется сложением смещения и базового адреса. Если Х0, то добавляется также и значение индекса. Вычисленный адрес будет исполнительным адресом, обозначаемым Е. Символически это записывается так: Е == D + (В) + (X), где буква, заключенная в круглые скобки, озна­чает «содержимое такого-то регистра». При выполнении сложе­ния все числа рассматриваются как двоичные целые и, если сумма занимает более трех байтов, воспринимаются только шесть ее младших шестнадцатеричных цифр.

Наиболее употребительным типом команды IBM-360 являет­ся команда типа RX, или регистр-индексируемая память, имею­щая следующий формат:

Байт

0

1

2

3

ОР

R1

Х2

В2

D2

где R1 — адрес регистра, содержащего первый операнд, a X2, B2 и D2 задают адрес второго операнда.

Используются и другие форматы, но мы будем рассматривать их позднее.

Числа с фиксированной точкой

Команды можно классифицировать не только по типу команды, но также и в соответствии с типом данных, над которыми выпол­няются операции. Под числом с фиксированной точкой мы пони­маем двоичное целое число, занимающее полуслово или, чаще, полное слово. Нулевой бит отводится под знак числа: 0 озна­чает плюс, а 1 — минус. Предполагается, что десятичная точка находится справа от самой младшей цифры числа.

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

Команды с фиксированной точкой

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

1. Название команды, например (Add) сложение;

2. Код операции (ОР), например 5А;

3. Мнемоническое обозначение, например А;

4. Формат (тип) команды, например RX;

5. Описание команды.

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

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

Load (Загрузка) 58 L RX

58

R1

X2

B2

D2

(E2)–>R1

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

Load (Загрузка) 18 LR RX

18

R1

R2

(R2)–>R1

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

Add (Сложение) 5А A RX

(R1) + (E2) –> R1

Add (Сложение) 1А AR RR

(R1) + (R2) –> R1

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

Subtract (Вычитание) 5В S RX

(R1) - (Е2) –> R1

Subtract (Вычитание) 1В SR RR

(R1) - (R2) -> R1

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

Пример:

До выполнения

команды: Регистр 3 0000 0034

Регистр 5 0067 891В

Команда: SR 1В 53

После выполнения

команды: Регистр 3 без изменений

Регистр 5 0067 88Е7

Команда: SR 1B 55

После выполнения

команды: Регистр 5 0000 0000

Store (Запись в память) 50 ST RX

(R1) –> E2

Первый операнд помещается в память по адресу второго. Эта команда обратна команде Загрузка в том смысле, что при ее выпол­нении содержимое регистра пересылается без изменения в основ­ную память. Для этой команды не существует формата RR.

Пример:

До выполнения

команды: Регистр 4 0000 3000

Регистр 7 FF58 F399

Память 00300С-0F 7777 8888

Команда: ST 50 7 0 400С

После выполнения

команды: Регистры 4 и 7 без изменений

Память 00300C-0F FF58 F399

Multiply (Умножение) 5С М RX

(R1 + 1) x (E2) –> R1, R1 + 1

Multiply (Умножение) 1C MR RR

(R1 + 1) x (R2) -> R1, R1 + 1

Умножение отличается от сложения и вычитания тем, что число значащих цифр результата операции равно сумме числа цифр обоих сомножителей. То есть, если перемножаются два 31-раз­рядных числа, произведение представляет собой 62-разрядное число. Поэтому для умножения требуется, чтобы R1 (общий ре­гистр) имел бы четный номер. Старшие значащие разряды про­изведения записываются в R1, a 32 младших значащих разряда в R1 + 1. Знак произведения записывается только в R1, так как знаковый бит в регистре R1 + 1 является частью произве­дения.

Пример:

До выполнения

команды: Регистр 0 FFFF 1378

Регистр 1 0200 Е001

Регистр 2 0000 0086

Регистр З 0000 0034

Регистр 4 0000 3000

Память 003010-13 FFFF FFE4

Команда: М 5С 2 0 4010

После выполнения

команды: Регистр 2 FFFF FFFF

Регистр 3 FFFF F158

Регистры 0, 1 и 4 без изменений

Память без изменений

Команда: MR 1C 01

После выполнения

команды: Регистр 0 0004 0380

Регистр 1 С801 С001

Команда: MR 1C 22

После выполнения

команды: Регистр 2 0000 0000

Регистр 3 0000 1В38

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

Divide (Деление) 5D D RX

(R1, R1 + 1) / (E2)

Частное –> R1 + 1

Остаток –> R1

Divide (Деление) ID PR RR

(R1, R1 + 1) / (R2)

Частное –> R1 + 1

Остаток –> R1

R1 — регистр с четным номером. При делении число с удвоенной точностью, находящееся в двух смежных регистрах с четным и нечетным номерами, делится на второй операнд. Оба операнда рассматриваются как целые числа. Остаток помещается в общий регистр с четным номером, частное — в общий регистр с нечет­ным номером R1 + 1- Знак частного определяется по алгебраиче­ским правилам. Остаток, если он не равен нулю, будет иметь тот же знак, что и делимое. Следует позаботиться о том, чтобы для записи частного хватило 31 разряда. Если это не будет соблюде­но, операция деления не будет выполнена и будет зафиксирована ошибочная ситуация.

Пример:

До выполнения команды: Регистр 0 0375 8142

Регистр 1 1701 0271

Регистр 8 FFFF FFFF

Регистр 9 FFFF 5678

Регистр 3 0000 0034

Команда: DR 1D 01

После выполнения

команды: Регистр 0 319F 444А

Регистр 1 05DE D8C7

Команда: DR 1D 83

После выполнения

команды: Регистр 8 FFFF FCBE

Регистр 9 FFFF FFEO

Переходы

Команды, которые нужно выполнить, сами должны быть раз­мещены где-нибудь в памяти. Обычно команды и данные хранят­ся в разных областях памяти, но это не обязательно. Рассмотрим программу, в которой заданы два числа с фиксированной точкой; первое по адресу 003100-03, второе по адресу 003104-07. Тре­буется вычислить сумму чисел и запомнить ее по адресу 003108-0В.

Программа могла бы выглядеть так:

Адрес Команда

Регистр 4 0000 3100

004000-03 L 58 2 0 4000

004004-07 А 5А 2 0 4004

004008-0B ST 50 2 0 4008

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

Branch on Condition (Условный переход) 47 ВС RX

47

M1

X2

B2

D2

Следующая команда выбирается по второму адресу (E2), если условия, указываемые в поле M1, удовлетворены; в противном случае в качестве следующей команды выбирается команда, сле­дующая по порядку адресов за командой условного перехода. В этой команде первый операнд не является адресом. Четыре его разряда определяют условие перехода. В машине проверяется признак результата и, если условие удовлетворено, осуществ­ляется переход.

Признак результата сокращенно обозначается СС (Condition-Code) и может принимать четыре значения: 0, 1, 2 и 3. Он уста­навливается в результате выполнения некоторых команд. Напри­мер, команды сложения, описанные выше, устанавливают СС = О, если сумма равна 0, СС = 1, если сумма меньше нуля, и СС = 2у если сумма больше 0. Каждый из четырех разрядов в поле M1, а именно 0, 1, 2 и 3, устанавливается равным единице, если про­граммист хочет выполнить переход для соответствующего значе­ния признака результата. Так, M1 = 0010 вызовет переход только в том случае, когда признак результата равняется 2; M1 = 1010 вызовет переход, если признак равен 0 или 2; M1 = 0111 вызовет переход, если признак не равен 0. Значение M1 = 0000 не вызы­вает перехода; при М1 = 0000 команда называется NOP (Нет Операции), a M1 = 1111 всегда вызывает переход и поэтому назы­вается безусловным переходом.

Например:

До выполнения команды: Признак результата 2

Регистр 4 0000 3100

Регистр 5 0000 4000

Команда в 00400C-OF : ВС 47 40 5000

Результат: Перехода нет; следующая команда выбирается по адресу 004010

Команда: ВС 47 6 0 5000

Результат: Переход; следующая команда выбирается по адресу 004000.

Из тех команд, которые мы уже рассматривали, признак результата устанавливают следующие:

Сложение: A RX

AR RR

Вычитание: S RX

SR RR

Эти команды устанавливают признак результата, равным 3, если возникло переполнение, т. е. если результат операции пре­вышает число, которое можно записать в регистр. В других случаях признак устанавливается равным 0, если результат нулевой, равным 1, если результат меньше нуля, равным 2, если результат больше нуля.

Признак результата не изменяется при выполнении команд Загрузка, Запись в память, Умножение и Деление.

Для установления признака результата можно воспользовать­ся следующими командами:

Compare (Сравнение) 59 С RX

(R1) – (Е2) : 0

Compare (Сравнение) 19 CR RR

(R1) – (R2) : 0

Второй операнд вычитается из первого операнда, как и в ко­мандах Вычитание, однако результат никуда не записывается. Признак результата устанавливается так же, как и в операции Вычитание. Содержимое первого регистра (R1) не изменяется.

Load and Test (Загрузка и проверка) 2 LTR RR

(R2) –> R1

Эта команда подобна команде Загрузка; однако в отличие от нее признак результата устанавливается равным 0, 1 или 2, если загружаемое число равно 0, меньше нуля или больше нуля соот­ветственно.

Load Complement (Загрузка дополнения) 13 LCR RR

– (R2) –>R1

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

Load Positive (Загрузка положительная) 10 LPR RR

| (R2) | –> R1

Абсолютное значение второго операнда помещается по адресу первого операнда. Признак результата устанавливается равным 0, 2 или 3, но не может быть установлен равным 1, так как резуль­тат этой команды, помещаемый в R1, не может быть отрицатель­ным числом.

Load Negative (Загрузка отрицательная) 11 LNR RR

- | (R2) | -> R1

Дополнение абсолютной величины второго операнда поме­щается по адресу первого операнда. Признак результата уста­навливается равным 0 или 1 в зависимости от того, является ли результат, помещаемый в R,, нулем или отрицательным числом.

Четыре команды LTR, LCR, LPR и LNB не имеют формата RX.

Примеры:

До выполнения

команды: Регистр 0 0000 0000

Регистр 1 0000 0001

Регистр 2 FFFP FFFE

Регистр 3 8000 0000

Регистр 4 8000 0001

Регистр 5 0000 0006

Регистр 6 0000 0006

Команда: LTR 12 22

После выполнения

команды: Регистр 2 без изменений

Признак результата 1 (результат меньше нуля)

Команда: LCR 13 62

После выполнения

команды: Регистр 6 0000 0002

Признак результата 2 (результат больше нуля)

Команда: LPR 10 60

После выполнения

команды: Регистр 6 0000 0000

Признак результата 0 (результат равен нулю)

Команда: LNR 11 64

После выполнения

команды: Регистр 6 7FFF FFFF

Признак результата 2 (результат больше нуля)

Команда: LNR 13 63

После выполнения

команды: Регистр 6 8000 0000 (дополнение)

Признак результата 3 (переполне­ние)

Команда: CR 19 21

После выполнения

команды: Регистры 1 и 2 без изменений

Признак результата 1 [(R1) > (R2)]

Имеется и другая форма команды условного перехода:

Branch on Condition (Условный переход) 07 BCR__RR

07

M1

R2

Эта команда совпадает с командой условного перехода ВС 47, но адрес перехода указывается двадцатью четырьмя младшими разрядами в общем регистре R2. Исключение: если R2 = 0, то перехода не происходит независимо от значения признака резуль­тата. Это другая форма команды NOP (Нет Операции).

Пример:

До выполнения

команды: Признак результата 1

Регистр 9 7FOO 4108

Команда: BCR 07 49

Результат: Происходит переход; следующая команда выбирается по адресу 004108

Команда: BCR 07 F0

Результат: Переход не происходит. Выполняется сле­дующая по

порядку команда.

Branch and Link (Переход с возвратом) 45 BAL RX

Branch and Link (Переход с возвратом) 05 BALR RR

При выполнении этих команд адрес следующей по порядку команды запоминается в общем регистре R1, и переход происхо­дит по адресу E2 (или R2 для формата RR). В формате RR, если R2 = 0, перехода не происходит. Не следует думать, что левый байт слова, запоминаемого в R1, будет содержать нули; в нем может оказаться все, что угодно. Одно из применений команды BALR состоит в занесении адреса следующей команды в регистр с последующим использованием этого регистра в качестве базо­вого регистра.

Формат SS (память — память)

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

Байт

1

2

3

4

5

6

ОР

L

B1

D1

В2

D2

где L — длина операнда, указывающая сколько байтов должны участвовать в этой операции. L может принимать любое значе­ние из интервала от 0 до 255 включительно, и всегда на единицу меньше числа байтов (от 1 до 256), участвующих в операции. Во всех операциях данные перемещаются из второго поля в первое.

Move (Пересылка) D2 MVC SS

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

Примеры:

До выполнения

команды: Регистр 1 0000 4000

Память 004000-08 0001 020304050677 88

Память 004010-16 EEDD CCBBAA99 34

Команда: MVC D2 06 1000 1010

После выполне­ния

команды: Память 004000-08 EEDD CCBB

АА99 3477 88

Память 004010-16 без изменений

Команда: MVC D2 04 1012 1011

После выполне­ния

команды: Память 004010-16 EEDD DD DD

DD DD 34

Move Numerics (Пересылка цифр) Dl MVN SS

Младшие половины каждого байта (цифры) из поля второго опе­ранда замещают младшие половины байтов в поле первого опе­ранда. Старшие половины байтов (зоны) остаются без изменений. Эта команда подобна команде Пересылка; отличие заключается в том, что в команде Пересылка цифр пересылаются только млад­шие половины байтов.

Move Zones (Пересылка зон) D3 MVZ SS

Старшие половины (зоны) каждого байта из поля второго операнда замещают соответствующие части байтов в поле перво­го операнда. Младшая половина каждого байта (цифра) остается без изменений. Эта команда подобна команде Пересылка; отличие заключается в том, что в команде Пересылка зон перемещаются только старшие половины байтов.

Пример:

До выполнения

команды: Регистр 1 0000 4000

Память 004000-08 0001 0203

0405 0677 88

Память 004010-16 EEDD CCFB

АА99 34

Команда: MVN Dl 03 1005 1010

После выполне­ния

команды: Память 004000-08 0001 0203

040Е 0D7C 8В

Память 004010-16 без изменений

Команда: MVZ D3 02 1 000 1012

После выполне­ния

команды: Память 004000-02 СО Fl A2

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

Упакованные данные

Поскольку две десятичные цифры могут быть расположены в одном байте, можно сэкономить память, «упаковав» две деся­тичные цифры в один байт. Для облегчения такой упаковки преду­смотрены две команды. Они имеют формат SS, но немного отли­чаются от команд того же формата, которые мы рассматривали в предыдущем разделе.

Байт

1

2

3

4

5

6

ОР

L1

L2

В1

D1

B2

D2

В этих командах, вообще говоря, поля, задаваемые первым и вторым операндами, могут и не иметь одинаковую длину. Поэто­му каждое поле должно иметь свой указатель длины. Для ука­зания каждой длины используется одна шестнадцатеричная циф­ра, принимающая значения от 0 до 15 включительно, что соот­ветствует полям длиной от 1 до 16 байтов.

Pack (Упаковать) F2 PACK SS

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

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

Z1

N1

Z2

N2

Z3

N3

Z4,

N4

Z5

N5

Z6

N6

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

0

N1

N2

N3

N4

N5

N6

Z6

В этом примере поле с данными в упакованном формате допол­нено слева нулем. Предполагается, что в четырех старших разря­дах (в зоне) младшего байта поля, содержавшего данные в зонном формате, располагается знак + или –. Этот знак помещается без изменения в самую правую шестнадцатеричную позицию упако­ванного поля. Остальные зоны поля зонного формата во внимание не принимаются. Поля обрабатываются справа налево, и цифры упаковываются в последовательные шестнадцатеричные позиции. Число десятичных цифр в поле упакованных данных будет всегда нечетным и будет лежать в диапазоне от 1 до 31.

Unpack (Распаковать) F3 UNPK SS

Эта команда преобразует второй операнд из упакованного формата в зонный формат; результат помещается на место перво­го операнда. Знак упакованного поля помещается в зоне младшей цифры; всем остальным зонам присваивается шестнадцатеричное значение F – стандартное обозначение зоны цифровых симво­лов в коде EBCDIC. Если поле первого операнда не вмещает результат операции, старшие значащие цифры теряются: если оно длиннее результата операции, свободные левые байты запол­няются нулями. Если вычислительная машина переключена на работу в коде ASCII, то зонам будет присваиваться значение 5, а не F.

Пример:

Регистр 1 0000 5000

До выполне­ния команды: Память 005000-08 F3F4 F2F3 F0F5 F6F7 D8

Память 005009-11 090А 0В0С 437Е 0F10 11

Память 005012-14 5678 9D

Команда: PACK F2 8 8 1009 1000

После выполнения

команды: Память 005009-11 0000 0000 3423 0567 8D

Команда: UNPK F3 8 2 1009 1012

После выполнения

команды: Память 005009-11 F0F0 F0F0 F5F6 F7F8 D9

При использовании машины для решения экономических задач около 60% всех данных являются числовыми данными, так что упаковка их экономит около 30% всей памяти, выделенной для хранения данных.

Десятично-двоичные преобразования

В машине IBM-360 имеются две команды, выполняющие пре­образования упакованных десятичных чисел в двоичные и обрат­но. Упакованное десятичное число занимает в основной памяти двойное слово (это означает, что его длина равна 8 байтам и адрес самого левого байта числа должен быть кратен 8), а двоичное число занимает общий регистр. Числа, которые должны быть пре­образованы, трактуются как десятичные и двоичные целые соот­ветственно; отрицательное двоичное число представляется при помощи дополнения. Отрицательные десятичные числа имеют в знаковой позиции либо D (для кода EBCDIC), либо В (для кода ASCII).

Convert to Binary (Преобразование в двоичную) 4F CVB RX

Десятичное число в форме упакованного двойного слова по адресу второго операнда преобразуется в двоичное целое и поме­щается в общий регистр R1. Если знаковая позиция равна В или D, то это означает, что десятичное число отрицательно и двоич­ное число представляется дополнением; если знаковая позиция равна А, С, Е или F, результатом преобразования будет положи­тельное двоичное число.

Convert to Decimal (Преобразование в десятичную) 4Е CVD RX

Целое двоичное число, находящееся в общем регистре R1, преобразуется в упакованное десятичное число и помещается в двойное слово по адресу E2. При преобразовании отрицатель­ных чисел в знаковую позицию помещается D (для кода EBCDIC) или В (для кода ASCII); при преобразовании положительных чисел – С или А соответственно.

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

Пример:

До выполнения

операции: Регистр 1 0000 5100

Регистр 2 0000 0002

Регистр 3 FFFF 1287

Память 005100-07 0000 0000 0000 123D

Память 005108-0F 0000 0000 0000 123С

Память 005110-17 1334 677D 8ВА5 С200

Команда: CVB 4F 2 0 1000

После выполне­ния

команды: Регистр 2 FFFF FF85

Команда: CVB 4F 2 0 1008

После выполне­ния

команды: Регистр 2 0000 007В

Команда: CVD 4E 3 0 1008

После выполне­ния

команды: Память 005108-0F 0000 0000 0060 793D

Команда CVD 4E 1 0 1008

После выполне­ния

команды: Память 005108-0F 0000 0000 0020 736С

С помощью команд Pack и Convert легко преобразовать число, считанное в машину в зонном формате, в целое двоичное число. После обработки результат снова преобразуется в зонный формат для выдачи на печать. Рассмотрим программу сложения двух шестиразрядных чисел в зонном формате, расположенных в памя­ти, начиная с адресов 005200 и 005206; результат помещается по адресу 00520С в зонном формате.

Регистр 1 0000 5200

Команды: PACK F2 75 1018 1000

CVB 4F 20 1018

PACK F2 75 1018 1006

CVB 4F 30 1018

AR 1А 23

CVD 4E 20 1018

UNPK F3 57 100C 1018

В этой программе область 005218—1F мы использовали как рабочую область для временного хранения упакованных чисел. Регистры 2 и 3 использовались для размещения двоичных чисел. Легко заметить, что из семи приведенных команд только одна является арифметической; все остальные предназначены для получения чисел в желаемом формате. Это типично при решении экономических задач, где операции преобразования данных встречаются чаще, чем арифметические операции.

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

В примере, приведенном в предыдущем разделе, было немного арифметических операций, но много команд преобразования данных. Для облегчения .решения таких задач в IBM-360 имеется восемь команд десятичной арифметики. Этот набор команд являет­ся стандартным для большинства моделей и может быть включен при желании за небольшую дополнительную плату на других. Все команды имеют формат SS:

ОР

L1

L2

B1

D1

В2

D2

Add Decimal (Сложение десятичное) FA АР SS

Второй операнд складывается с первым, и сумма помещается на место первого операнда. Поля операндов могут перекрываться, но так, чтобы их правые (младшие) байты совпадали. Знак резуль­тата определяется по правилам алгебры, но нулевой результат всегда имеет знак плюс. Признак результата устанавливается равным 0, 1 или 2, если сумма равна нулю, меньше нуля, пли больше нуля соответственно. Если сумма слишком длинна и не укладывается в отведенное для результата поле, признак резуль­тата устанавливается равным 3, что указывает на переполнение; в этом случае теряются старшие значащие цифры.

Subtract Decimal (Вычитание десятичное) FB SP SS

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

Zero and Add (Сложение с очисткой) F8 ZAP SS

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

Compare Decimal (Сравнение десятичное) F9 СР SS

Эта команда аналогична команде вычитания; отличие заклю­чается в том, что результат не сохраняется. Оба операнда остают­ся без изменений. Признак результата устанавливается равным 0, если операнды равны, равным 1, если первый операнд меньше, и равным 2, если первый операнд больше второго. Поскольку результат не запоминается, переполнения не возникает. При вы­полнении этой команды разницы между положительным и отри­цательным нулем нет.

Multiply Decimal (Умножение десятичное) FC МР SS

Второй операнд (множитель) умножается на первый операнд (множимое). Результат помещается в поле первого операнда. Длина второго операнда не может превышать восьми байтов и должна быть всегда меньше длины первого операнда. Кроме того, в первом операнде должно быть столько нулевых старших цифр, каков размер поля второго операнда. В этих условиях переполнение результата произойти не может. Поля могут пере­крываться, но так, чтобы совпадали их правые (младшие) байты. Признак результата остается без изменения. Заметим, что для расширения поля первого операнда может использоваться команда сложения с очисткой, если это необходимо.

Divide Decimal (Деление десятичное) FD DP SS

Первый операнд (делимое) делится на второй операнд (дели­тель). Частное помещается в поле первого операнда и его длина в байтах равна L1 – L2. Остаток помещается после частного по адресу E1 + L1 – L2, и его длина в байтах равна L2. Длина поля делителя не может быть больше восьми байтов, и во всех случаях его длина должна быть меньше длины поля делимого. Делимое, делитель, частное и остаток рассматриваются как целые числа. Знак остатка тот же, что и у делимого, даже если остаток равен нулю. Поля операндов могут перекрываться, но так, чтобы совпадали их младшие байты. Признак результата остается без изменения. Максимальный размер делимого равен 31 десятичной цифре; максимальный размер частного равен 29 десятичным цифрам.

Move with Offset (Пересылка со сдвигом) F1 МVO SS

Эта команда не относится к командам десятичной арифмети­ки, но мы рассмотрим ее здесь, так как она используется с этими командами.

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

Пример:

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

Память 004800-06 1234 5678 9012 ЗС

Память 004810-16 1122 3344 5566 7D

Память 004900-04 0000 0123 4С

Память 004905-09 0034 1200 0D

Память 00490А-14 0000 0000

0000 0310

0040 OD

Память 004915-1F 0000 6826

1400 1301

3500 1D

Память 004920-2А 7777 7777

7777 7777

7777 77

Команда: SP FB 4 4 1100 1105

После выполне­ния

команды: Память 004900-04 0034 1323 4С

Команда: ZAP F8 A 4 1120 1100

После выполне­ния

команды: Память 004920-2А 0000 0000 0000 0000

0123 4С

Команда: МР FC A 4 110А 1105

После выполне­ния

команды: Память 00490А-14 0000 0010 5773

3648 0000 0С

Команда: DP FD A 4 1115 1105

После выполне­ния

команды: Память 004915-1F 2000 6272 019С

0013 0700 1D

Команда: MVO Fl 6 5 1010 1000

После выполне­ния

команды: Память 004810-16 0123 4567 8901 2D

Команда: MVO Fl 4 5 1012 1000

После выполне­ния

команды: Память 004810-16 1122 4567 8901 2D

Числа с плавающей точкой

Числа с плавающей точкой в IBM-360 представляются в сле­дующем формате:

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

Мантисса

0 1 8 31 или 63

Самый левый бит отводится под знак числа: 1 означает минус, 0 – плюс. Следующие 7 битов содержат характеристику. Осталь­ные биты слова или двойного слова содержат дробную часть, или мантиссу. Если мантисса задается 14 шестнадцатеричными циф­рами, то говорят, что число с плавающей точкой представлено с удвоенной точностью; если же мантисса задается 6 шестнадца­теричными цифрами, то число представлено с обычной точностью. Число, представленное в виде ±ccffffff, имеет значение ±.ffffff x 10cc-64. Таким образом, мантисса, у которой десятичная точка фиксирована перед левым битом (позиция 8), умножается на 16 в степени характеристика минус 64. Представление в такой форме позволяет изображать числа, абсолютная величина которых больше 00100000 = .540 х 10-78 и меньше

7F FFFFFF FFFFFFFF = .724 x 1076.

Приведем несколько примеров записи чисел

Десятичное Двоичное С плавающей точкой

1 00000001 41 100000

10 0000000А 41 А00000

.1 40 199999 9999999А

.01 3F 28F5C2 8F5C28F6

0 00000000 00 000000 00000000

974 00000ЗСЕ 43 ЗСЕ000

67 345 00010711 45 107110

66371 00010343 45 103430

-67 345 FFFFF8FF С5 107110

2 147 483 647 7FFFFFFF 48 7FFFFFFF000000

.000 915 527 343 75 ЗЕ ЗС0000

–.000 915 527 343 75 BE ЗС0000

    1. 42 435841 ЕВ841ЕВ8

Заметим, что отрицательные числа с плавающей точкой пред­ставляются не в виде дополнений. Числа, представленные с обыч­ной точностью, занимают меньше места в памяти, а числа с удвоен­ной точностью значительно увеличивают точность вычислений. В большинстве моделей IBM-360 арифметические операции над числами, представленными с обычной точностью, выполняются несколько быстрее операций с удвоенной точностью.

Когда значение мантиссы лежит между 1/16 и 1, мы говорим, что число нормализовано. В IBM-360 числа с плавающей точкой могут быть не нормализованы, однако результат операции над ненормализованными числами может содержать меньше знача­щих цифр.

Команды с плавающей точкой

Команды с плавающей точкой имеют два формата: RR или RX. В каждом из этих форматов существует два типа команд: для операций с обычной точностью и для операций с удвоенной точностью. На малых моделях IBM-360 команды с плавающей точкой включаются за дополнительную плату, на больших они являются обязательными.

В командах с плавающей точкой не используются 16 общих регистров. Они выполняются с использованием четырех регистров с плавающей точкой, каждый из которых занимает двойное слово. Эти регистры имеют номера 0, 2, 4 и 6 и вмещают числа с удвоен­ной точностью. 44 команды, которые рассматриваются в этом разделе, используют только эти специальные регистры, все осталь­ные команды IBM-360 с регистрами в качестве операндов исполь­зуют общие регистры.

Команды с плавающей точкой

Формат

RR

RX

Точность

Удвоенная

Обычная

Удвоенная

Обычная

Загрузка

28

LDR

38

LER

68

LD

78

LE

*Сравнение

29

CDR

39

CER

69

CD

79

СЕ

* Сложение N

ADR

ЗА

AER

6A

AD

7A

AE

*Вычитание N

ВПК

SER

6B

SD

SE

Умножение

MDR

ЗС

MER

6C

MD

7C

ME

Деление

2D

DDR

3D

DER

6D

DD

7D

DE

*Сложение U

AWR

ЗЕ

AUR

6E

AW

7E

AU

*Вычитание U

2F

SWR

3F

SUR

6F

SW

7F

SU

Запись в память

60

STD

70

STE

*3агрузка положительная

20

LPDR

30

LPER

*Загрузка отрицательная

21

LNDR.

31

LNER

*Загрузка и проверка

22

LTDR

32

LTER

*Загрузка дополнения

23

LCDR

33

LCER

Пополам

24

HDR

34

HER

В этой таблице N означает, что результат операции будет нормализован, a U, что результат не будет нормализован. Коман­ды, помеченные символом *, устанавливают признак результата равным 0, 1 или 2 соответственно при нулевом, отрицательном или положительном результате. Эти команды во всем аналогичны обычным командам, с той разницей, что действия производятся над числами с плавающей точкой.

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

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

Загрузка

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

Сравнение

Второй операнд вычитается из первого; результат вычитания не сохраняется, а используется для установки признака результа­та равным 0, если операнды равны; равным 1, если первый операнд больше; равным 2, если второй операнд больше. Заметим, что при сравнении чисел

45 067440

44 674400

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

Сложение с нормализацией

Второй операнд складывается с первым и сумма помещается на место первого операнда. Признак результата устанавливается равным 0, если сумма равна нулю, равным 1, если сумма меньше 0, равным 2, если сумма больше нуля, и равным 3, если произошло переполнение.

Например, если мы сложим числа

44 674400 89654000 44

12809Е 79001000

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

44 79С49Е 89654000,

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

44 79C49F 02655000.

Вычитание с нормализацией

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

Умножение

Два операнда перемножаются, и результат помещается на ме­сто первого операнда. Результат округляется в соответствии с тем, куда он помещается – в слово или в двойное слово.

Деление

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

Сложение без нормализации

Вычитание без нормализации

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

Например, при сложении чисел

44 674400 89654000

42 123001 11348997

мантисса второго числа должна быть сдвинута на 2 шестнадцатеричные цифры вправо и результатом сложения будет

44 674400 89654000

44 001230 01113489

44 675630 8А767489

Теперь рассмотрим такой пример

44 674400 89654000

С4 5F0000 00001000

44 084400 89653000

В результате получается ненормализованное число.

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

43 844008 96530000

Запись в память

Число из регистра переписывается в память.

Загрузка положительная

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

Загрузка отрицательная

Абсолютная величина второго операнда, взятая со знаком минус, помещается на место первого операнда. Признак резуль­тата устанавливается равным 0 или 1.

Загрузка и проверка

Совпадает с командой Загрузка, но устанавливается признак результата.

Загрузка дополнения

Второй операнд помещается на место первого операнда с про­тивоположным знаком. Признак результата устанавливается рав­ным 0,1 или 2.

Пополам

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

Приводимая ниже программа прибавляет число, находящееся в памяти по адресу 003800, к числу, находящемуся по адресу 003804, и помещает результат по адресу 003808. Предполагается, что общий регистр 3 содержит 00 003800:

003800 44 124889

003804 СЗ F17333

003808 78 111111

Команды:

003810 LE 78 2 03 000

003814 АЕ 7А 2 03 004

003818 STE 70 2 03 008

Результат по адресу 003808: 43 33155D

Результат в регистре с плавающей точкой 2: 43 33155D

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

Команды, выполняющие действия над полусловами

Обычные команды с фиксированной точкой производят опера­ции над словами. Ради экономии памяти желательно хранить короткие константы в виде полуслов. Имеется шесть команд типа RX, выполняющих действия над полусловами.

40 STH – Запись в память полуслова

48 LH – Загрузка полуслова

49 СН – Сравнение полуслов

4А АН – Сложение полуслова

SH – Вычитание полуслова

4С МН – Умножение полуслова

Эти команды выполняются совершенно аналогично обычным командам ST, L, С, А и S. Полуслово расширяется до полного слова распространением самого левого бита (знакового) на 16 старших битов, а затем выполнение операции происходит так же, как если бы данные в памяти с самого начала занимали полное слово.

Команда МН несколько отличается от обычной команды М. В команде МН содержимое полуслова из памяти (второй операнд) умножается на содержимое регистра (первый операнд), и резуль­тат операции помещается на место первого операнда. В этой операции принимает участие только один регистр, в то время как при выполнении команды М участвуют два. Сохраняются только 32 младших бита полученного произведения и переполнение не регистрируется.

Рассмотрим следующий пример:

До выполнения команды:

008300-07 FFFD 0002 9999 9999

регистр 3 00 008300

Команда Содержимое регистра 4 послевыполнения команды

LH 48 4 03 000 FFFF FFFD

МН 4С 4 03 002 FFFF FFFA

ST 50 4 03 004 FFFF FFFA

SH 4B 4 03 006 0000 0000

Команды формата RS

В IBM-360 имеется несколько команд, для выполнения кото­рых требуется три адреса. Для этих команд предусмотрен фор­мат RS:

Байт

0

1

2

3

ОР

R1

R3

В2

D2

Этот формат напоминает формат RХ за тем исключением, что адрес второго операнда не может индексироваться и вместо индек­са задается третий операнд – содержимое одного из общих регистров.

Позже мы встретимся с несколькими командами формата RS. Здесь же давайте познакомимся только с двумя из них:

90 Stm Запись в память групповая.

Содержимое общих регистров R1, R1+1, …, R3 записы­вается в последовательные ячейки памяти, начиная с ячейки, заданной исполнительным адресом Е2 = (В2) + D2. Если R1 больше R3, то происходит циклическая адресация, т. в. за реги­стром с адресом 15 следует регистр с адресом 0, затем регистр с адресом 1 и т. д. При помощи этой команды можно записать в память содержимое любого числа регистров – от 1 до 16.

Например, команда

90 DC 0400

помещает содержимое регистра 13 в ячейки 000400–03, регистра 14 в 000404–07, регистра 15 в 000408–0В, регистра 0 в 00040С–0F, …, регистра 12 в 043C–3F.

98 Lm Загрузка групповая

Команда LM противоположна команде STM. В общие регистры R1, R1+1, …, R3 помещается содержимое ячеек памяти, начиная с ячейки, определяемой адресом второго операнда (E2).

Так, по команде

98 CD 0500

в регистр 12 помещается содержимое ячеек 000500–03 и в регистр 13 содержимое ячеек 000504–07.

Команды формата SI

Команды формата SI имеют следующую структуру:

Байты

0

1

2

3

ОР

I2

B1

D1

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

Для иллюстрации рассмотрим команду

92 Mvi Пересылка непосредственная

Байт данных I2 записывается в память по адресу E1 = D1 + (B1).

Например, команда 92 FF 0 509 заменит предыдущее содер­жимое ячейки 000509 числом FF. С помощью этой команды в память записывается только один символ.

Другой командой формата SI является команда

91 Тм Проверить по маске

Команда ТМ сопоставляет маску I2 и байт памяти, определяе­мый адресом первого операнда, и устанавливает признак резуль­тата. Если каждому биту в I2, равному 1, соответствует бит, рав­ный 0 в байте памяти, признак результата устанавливается рав­ным 0; если каждому биту в I2, равному 1, соответствует бит, равный 1 в байте памяти, то признак результата устанавливается равным 3; во всех остальных случаях признак результата уста­навливается равным 1. Если I2 = 00, то признак результата устанавливается равным 0. Содержимое байта по адресу E1 этой командой не меняется.

Рассмотрим несколько примеров:

I2 0000 1111

Байт в памяти 0001 0101

Результат СС = 1

I2 0000 1111

Байт в памяти 1100 0000

Результат СС = 0

I2 0000 0000

Байт в памяти 1111 1111

Результат СС = 0

Четыре команды ввода — вывода SIO, HIO, TIO, ТСН являют­ся командами формата SI. Однако в этих командах поле I2 игно­рируется.

Логические команды

Следующие команды принадлежат к стандартному набору команд для IBM-360:

RR

RX

SI

SS

И

14 NR

54

N

94

NI

D4

NC

Сравнение кодов

15 CLR

55

CL

95

CLI

D5

CLC

ИЛИ

16 OR

56

O

96

OI

D6

ОС

Исключающее ИЛИ

17 XR

57

X

97

XI

D7

ХС

Форматы команд:

RR

ОР

R1

R2

RX

ОР

R1

X2

B2

D2

SI

ОР

I2

B1

D1

SS

ОР

L

B1

D1

B2

D2

Заметим, что в формате SS поля обоих операндов имеют одина­ковую длину.

И.

Производится поразрядное логическое умножение операн­дов. Результат помещается на место первого операнда. Признак результата устанавливается равным 0, если в результате полу­чится нуль; в противном случае признак результата устанавли­вается равным 1.

ИЛИ.

Команда аналогична команде И, только производится пораз­рядное логическое сложение операндов.

Исключающее ИЛИ.

Команда аналогична команде И, только производится пораз­рядное сложение по модулю два.

Сравнение кодов.

Два операнда, понимаемые как двоичные величины без знака, поразрядно сравниваются. Операция сравнения прекращается, как только встречаются несовпадающие разряды.

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

Рассмотрим примеры:

До выполнения команды:

008600-03 7654 FF00

008604-07 0001 1000

008608–0B 3580 0346

Регистр: 2 00 008600

Команда: LM 98 35 2000

Результат: Регистр З 7654 FF00

Регистр 4 0001 1000

Регистр 5 3580 0346

Команда: NR 14 3 4

Результат: Регистр 3 0000 1000 СС = 1

Команда: CLR 15 45

Результат: СС = 1

Команда: I 96 06 2008

Результат: 008608 37 СС = 1

Команда: ХС D7 01200А 2000

Результат: 00860А–0В 7512

Команда: ХС D7 012000 2000

Результат: 00860А–0В 0000

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

Команды переходов

Мы уже рассматривали команду Условный переход, которая бывает двух форматов RX и RR. Теперь рассмотрим еще 6 команд переходов.