Команды управления программой

Команды безусловного перехода (JUMP или BRANCH) изменяют обычную последовательность выполнения команд. Команда JUMP 15Э засылает число 150 в счетчик команд; следующую команду процессор будет выбирать из этой ячейки. Эти команды воздействуют тольк о на счетчик команд. Команда SKIP позволяет пропустить очередную команду в последовательности команд.

Некоторые ЭВМ используют в качестве счетчика команд один из регистров общего назначения. В этом случае передача данных в память, межрегистровая передача или операции со стеком могут изменять содержимое счетчика команд. Например, если регистр 4 — этэ счетчик команд, то команда LOAD REGISTER 4 аналогична команда безусловного перехода.' Электронно-вычислительные машины, в которых управление счетчиком команд осуществляется таким способом, могут быть очень гибкими. Однако программист затруднится определить порядок, в котором выполняются команды, так как команды передачи управления не отличаются от других команд.

Команды условного перехода по программе являются важной составной частью большинства программ. Такие команды позволяют ЭВМ повторять последовательности команд, искать и выделять определенные символы, выявлять ошибки и контролировать состояние периферийных устройств. Команды условного перехода являются ключевыми в решении задач на ЭВМ, когда необходимо выбирать последовательности команд на основе информации, полученной от входных данных и в процессе выполнения операций. Именно команды условного перехода превращают ЭВМ в «интеллигентный» контроллер.

Наиболее простая команда условного перехода — это команда ПЕРЕХОД ПО УСЛОВИЮ (JUMP ON CONDITION). Эта команда вызывает переход, если имеет место выполнение условия. Если условие не выполнено, ЭВМ выполняет очередную команду из последовательности. Условие, включенное в команду, может иметь различные формы. Это может быть состояние отдельных разрядов регистра признаков, таких как ПЕРЕНОС (CARRY), НУЛЬ (ZERO), ЗНАК (SIGH) или ПЕРЕПОЛНЕНИЕ (OVERFLOW).

В табл. 3.5 содержится несколько примеров команд ПЕРЕХОД ПО УСЛОВИЮ и состояния отдельных разрядов регистра признаков. Условием перехода может быть и внешней входной сигнал, который вводится в ЭВМ, например ПЕРЕХОД ПО ПРОВЕРЯЕМОМУ НУЛЮ (JUMP ON TEST ZERO). Некоторые ЭВМ допускают комбинации условий (например, ПЕРЕХОД ПО ПЕРЕНОСУ и НУЛЮ ПЕРЕПОЛНЕНИЯ) (JUMP ON CARRY AND OVERFLOW ZERO).

Таблица 3.5. Команды условных переходов

Адрес

Команда

Результат

100

JUMP ON CARRY 150

 

(PC) = 150, если ПЕРЕНОС= 1 (PC) = 101, если ПЕРЕНОС=0

135

JUMP ON NOT ZERO

139

(PC) = 139, если НУЛЬ = 0 (PC) = 136, если НУЛЬ=1

160

JUMP ON NEGATIVE

120

(PC) = 120, если ЗНАК=1

145

 

 

(PC) = 161, если ЗНАК=0

JUMP ON OVERFLOW

147

(PC) = 147, если ПЕРЕПОЛНЕ­НИЕМ

(PC) = 146, если ПЕРЕПОЛНЕН НИЕ= 1



Иногда команды условного перехода действуют так, как будто они Есегда следуют за командой СРАВНИТЬ. Так, команда ПЕРЕХОД ПО РАВЕНСТВУ (JUMP ON EQUAL) вызывает по программе переход, если две сравнимые величины оказались равными. Такие команды условного перехода, как ПЕРЕЙТИ ПРИ ОТСУТСТВИИ РАВЕНСТВА (JUMP ON NOT EQUAL), ПЕРЕЙТИ, ЕСЛИ ВЕЛИЧИНА БОЛЬШЕ (JUMP ON GREATER THAN), ПЕРЕЙТИ, ЕСЛИ ВЕЛИЧИНА МЕНЬШЕ (JUMP ON LESS THAN), и т. д., осуществляют переход, если число, записанное в аккумуляторе, находится в определенном отношении с числом, с которым оно должно сравниваться.

В некоторых ЭВМ используются только команды условного перехода типа ПРОПУСТИТЬ (SKIP). В таких ЭВМ процессор не может осуществить условный переход по программе, но может по условию пропустить очередную команду в последовательности. В таких ЭВМ операция условного перехода выполняется по двугл командам. Последовательность команд

SKIP ON NOT CONDITION JUMP LOCATE

производит то же действие, что и одиночная команда JUMP ON CONDITION LOCATE

Команда условного пропуска SKIP заставляет ЭВМ]пропустить команду безусловного перехода, если условие не выполняется. Эта техника неудобна, но имеет то преимущество, что только команда безусловного перехода требует адресации памяти.

Недостающие для данной ЭВМ команды условного перехода можно получить простым способом. Например, если ЭВМ имеет команду ПЕРЕХОД ПО НУЛЕВОМУ РЕЗУЛЬТАТУ (JUMP ON ZERO), но не имеет команды ПЕРЕХОД ПО НЕНУЛЕВОМУ РЕЗУЛЬТАТУ (JUMP ON NOT ZERO), то последовательность команд

JUMP ON ZERO *+2 JUMP ADD R

эквивалентна одиночной команде

JUMP ON NOT ZERO ADD R

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

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

0 LOAD INDEX REGISTER #10 (ЗАГРУЗИТЬ В ИНДЕКСНЫЙ РЕГИСТР НЕПОСРЕДСТВЕННЫЙ ОПЕРАНД 10)

1 CLEAR ACCUMULATOR (ОЧИСТИТЬ АККУМУЛЯТОР)

2 ADD 100, X (ПРИБАВИТЬ 100+Х)

3 DECREMENT INDEX REGISTER (ВЫЧЕСТЬ 1 ИЗ СОДЕРЖИМОГО ИНДЕКСНОГО РЕГИСТРА)

4 JUMP ON NOT ZERO 2 (ПЕРЕЙТИ К 2 ПО НЕНУЛЕВОМУ РЕЗУЛЬТАТУ)

После каждого цикла (адреса 2—4) команда ADD 100, X прибавляет другое число (из ячеек 101 —100) к сумме, находящейся в аккумуляторе. Индексный регистр, кроме своих прямых функций, выполняет еще и функции счетчика итераций. Заметим, что подсчет в индексном регистре позволяет признаку НУЛЬ (ZERO) выступать в качестве условия выхода из цикла.

 



Горка шампанского на свадьбу спб best-emotions.ru.