Команды условного перехода

 

В табл. 3.14 приведены команды условного перехода, используемые МП Intel 8080 и Motorola 6800. Микропроцессор Intel 8080 выполняет условные переходы по любому значению признаков: 1 или 0. Все команды условных переходов используют 16-разрядный прямой адрес.

Наиболее простыми командами условных переходов являются ПЕРЕХОД ПО НУЛЮ JZ (JUMP ON ZERO) и ПЕРЕХОД ПРИ ОТСУТСТВИИ НУЛЯ JNZ (JUMP ON NOT ZERO). Команда JNZ вызывает переход по программе, если признак НУЛЬ равен 0 (предыдущий результат не был равен 0). В большинстве программных циклов используется команда JZ или JNZ. Типичная последовательность команд

DCR С JNZ LOOP

заставляет ЦП выполнять программу (с начальным адресом LOOP), пока содержимое регистра С остается равным 0. На рис. 3.19 показан типичный цикл программы, в которой требуемое число итераций (COUNT) определено в регистре С. По ходу основной программы содержимое регистра С уменьшается на 1 (декре-ментируется) и команда JNZ используется для определения числа повторения основной программы.

Команды JZ и JNZ можно также использовать для обращения к отдельным байтам данных. Последовательность

CPI 100 JZF100

вызывает переход по адресу F100, если содержимое аккумулятора равно 100.

Другие простые команды условного перехода — это ПЕРЕХОД ПО ПРИЗНАКУ ПЕРЕНОСА JC (JUMP ON CARRY) и ПЕРЕХОД ПРИ ОТСУТСТВИИ ПРИЗНАКА ПЕРЕНОСА JNC (JUMP ON NOT CARRY). Эти команды часто используются вместе с командой СРАВНИТЬ (COMPARE). Команда СРАВНИТЬ Устанавливает признак ПЕРЕНОС в 1 в том случае, если 8-битное число без знака в аккумуляторе меньше числа, с которым оио сравнивается. При сравнении CARRY = 1 означает, что для выполнения вычитания нужен заем. Последовательность команд

СР1 10 JC LSTEN

вызывает переход к ячейке с Bj$pec©Bi*LSTEN, если я аккумуляторе содержится я и ело без знака, которое ние ныне it) (CARRY = 10, если содержимое аккумулятора равно 10).

Таким же образом последовательность команд

CPi «4 JNt 1ARGE

дозывает переход к ячейке с адресом LARGE, если в аккумуляторе содержится •число*без знака, значение которого лежит между 64 и 255

Команды JC и JNC можно использовать для проверки значения разряда, сдвигаемого на место разряда ПЕРЕНОС. Заметим, что в МП Intel 8080 команды сдвига не влияют ни на какие другие признаки. Таким образом, для того чтобы определить, четное ли число содержится в аккумуляторе (последний значащий разряд есть 0), используется последовательность

RAR

JNC EVEN

По команде RAR последний значащий разряд аккумулятора перемещается в разряд ПЕРЕНОС, и команда JNC вызывает переход к ячейке с адресом EVEN, если ПЕРЕНОС = 0.



Микропроцессор Motorola 6800 в командах условных переходов использует только относительную адресацию. Поэтому, как и в команде безусловного перехода BRANCH (BRA), возможность выполнения безусловных переходов ограничена 129 ячейками вперед или 126 назад. Более длинные переходы по программе могут быть получены при использовании последовательности

BRANCH ON NOT CONDITION OVER

JMP ADDR

OVER

Микропроцессор МП Motorola 6800 подобно Intel 8080 имеет команды условного перехода BRANCH, но с дополнительными комбинациями Названия большинства команд перехода отражато-* тот факт, что исполняются операции сравнения. Команда BEQ (П&РЕЙТЙГТРИ УСЛОВИЙ РАВЕНСТВА BRANCH ON EQUAL) вызывает переход, если иризнак НУЛЬ равен единице, т. е. при сравнении тесла оказались равными. Команда BNE (BRANCH ON NOT EQUAL) вызывает переход, если признак НУЛЬ равен нулю. Как и ь МП Intel 8080, эти ' команды могут управлять циклами и выполнять разнообразные проверки.

Титичный. пример организации цикла (счетчик содержат адрес ячейки памяти

40):

DEC 40 BNE LOOP

Типичный пример организации поиска:

СМРА # 100 BEQ F100

Как и в МП Intel 8080, можно использовать разряд ПЕРЕНОС при выполнении команды СРАВНИТЬ. Микропроцессор Motorola 6800 имеет не только команды ВС (ПЕРЕЙТИ ПРИ НАЛИЧИИ ПЕРЕНОСА - BRANCH IF CARRY SET) и BCC (ПЕРЕЙТИ ПРИ ОТСУТСТВИИ ПЕРЕНОСА — BRANCH IF CARRY CLEAR), но и дополнительную пару команд — BHI (ПЕРЕЙТИ, ЕСЛИ БОЛЬШЕ, — BRANCH IF HIGHER) и BLS (ПЕРЕЙТИ, ЕСЛИ МЕНЬШЕ ИЛИ РАВНО, — BRANCH IF LOWER OR SAME). Команда BLS вызывает переход, если содержимое аккумулятора меньше или равно заданному числу* а команда ЙН1„ если содержимое аккумулятора больше заданного чисда. Так, после выполнения команды СМРА ф 64 возможны следующие варианты:

1. ВС S DONE

(PC) = DONE, если (А) < 64

2. BLS DONE

(PC) — DONE, если (A) < 64

3. BCC DONE

(PC) = DONE, если (A) > 64

4. BHI DONE

(PC) — DONE, если (A) > 64

Так как МП Motorola 6800 имеет разряд ПЕРЕПОЛНЕНИЕ (OVERFLOW), арифметическая операция получения числа в дополнительном коде у него проще тем у МП Intel 8080. Используя команды BVC (ПЕРЕЙТИ ПРИ ОТСУТСТВИИ ПЕРЕПОЛНЕНИЯ — BRANCH IF OVERFLOW CLEAR) и BVS (ПЕРЕЙТИ ПРИ НАЛИЧИИ ПЕРЕПОЛНЕНИЯ — BRANCH IF OVERFLOW SET), можно определить, имеет ли место переполнение при получении дополнительного кода «гисел. Команды BGE (ПЕРЕЙТИ, ЕСЛИ БОЛЬШЕ ИЛИ РАВНО НУЛЮ — BRANCH IF GREATER THAN OR EQUAL TO ZERO), BLT (ПЕРЕЙТИ, ЕСЛИ МЕНЬШЕ НУЛЯ,— BRANCH IF LESS THAN ZERO), BGT (ПЕРЕЙТИ. ЕСЛИ БОЛЬШЕ НУЛЯ,— BRANCH IF GREATER THAN ZERO) и BLE (ПЕРЕЙТИ, ЕСЛИ МЕНЬШЕ ИЛИ РАВНО НУЛЮ, — BRANCH IF LESS THAN OR EQUAL TO ZERO) также анализируют возможность переполнения. Логические функции признаков (табл. 3.15) определяют различные услов»я переходов по программе.



 



Обзор кислородного концентратора invacare. . Детские ветровки для девочек по доступным ценам.