Мы уже знаем, что при выполнении некоторых арифметических команд и команд сравнения вырабатывается признак результата. После установки признака результата может быть выполнена команда условного перехода, проверяющая его значение. При выполнении команды условного перехода проверяется, соответствует ли выработанный признак определенному результату предшествующих вычислений. Если да, то содержимое счетчика команд заменяется на адрес команды, которая по замыслу программиста должна в этом случае выполняться следующей. Если же признак результата не такой, по которому производится переход, то содержимое счетчика команд не изменяется и продолжается последовательное выполнение команд в соответствии с их расположением в памяти.
До сих пор мы рассматривали арифметические команды и команды сравнения, при выполнении которых устанавливается признак результата, отражающий результат операции. При этом, например, для арифметических операций возможны состояния признака результата, соответствующие нулевому, положительному, отрицательному результатам и состоянию переполнения.
Таким образом, если бы мы захотели присваивать числовые значения признаку результата для обозначения различных возможных ситуаций, то таких значений должно было бы быть четыре. Машине, работающей в двоичной системе, для этого достаточно двух битов, поскольку с их помощью можно закодировать четыре различных состояния: 00, 01, 10, 11.
Именно так и обстоит дело в IBM 360. Значение признака результата определяется содержимым двух битов специального регистра, называемого Словом состояния программы (Program Status Word—PSW), подробное обсуждение которого содержится в гл. 11. Возможным состоянием признака результата присвоены следующие значения:
двоичное |
Значение десятичное |
Результат |
00 |
0 |
нуль |
01 |
1 |
отрицательный |
10 |
2 |
положительный |
11 |
3 |
переполнение |
Каждая команда, вырабатывающая признак результата, устанавливает в соответствии с конкретной ситуацией определенное значение в двух-битовое поле признака результата PSW.
При выполнении команд условного перехода это значение проверяется, и в соответствии с ним производится или не производится фактическая передача управления.
Предположим, что
(5)=00000100
(6)=00000050
После выполнения команды
AR 5,6
получаем
(5)=00000150
и устанавливается признак результата 10, так как результат положителен.
Аналогично при том же самом первоначальном содержании регистров и выполнении команды
CR 6,5
будет установлено значение 012 признака результата ((6) меньше (5)).
Пусть СС=002, что соответствует нулевому результату, полученному при выполнении предшествующей команды. Тогда по команде
BP LOOP
проверяется, выполнено ли равенство СС=102. Поскольку оно в данном случае не выполняется, переход не произойдет.
Команда
В LOOP
означает следующее: «Передать управление на LOOP вне зависимости от значения СС».
Итак, можно подвести следующий итог: выполнение условного перехода фактически разбивается на два шага. Сначала в соответствии с результатом вычислений вырабатывается признак результата, соответствующий одному из четырех возможных случаев. Затем значение признака результата проверяется командой условного перехода, и если оно соответствует определенному в самой команде перехода, то производится передача управления. Посмотрим теперь, как все сказанное выражается в машинном языке и выполняется в вычислительной машине.