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

Команды переходов могут быть условными и безусловными. Условные переходы выполняются на основе анализа состояния битов в статусном регистре SR. Переход осуществляется относительно содержимого регистра PC на расстояние от -511 до 512 слов.

Для некоторых команд условных переходов ассемблер поддерживает альтернативную нотацию.

Ø Команда: JNE/JNZ - Jump if Not Equal / Jump if Not Zero -прыжок если не равно / прыжок если не ноль

Синтаксис: jne label

jnz label

Описание: Тестируется состояние бита Z статусного регистра SR. Если Z=0 осуществляется переход на метку label.

Флаги: Не модифицируются

Пример: Очистить 30 байт ОЗУ начиная с адреса 200h

mov #200h, R5 ; настраиваем указатель на начало блока ОЗУ

Loop: mov.b #0, 0(R5) ; пересылаем число 0 в текущую ячейку ОЗУ

add #1, R5 ; наращиваем указатель

cmp #200h+30, R5 ; проверяем достиг ли указатель границы

; блока ОЗУ

jne Loop ; Если нет - переход на начало цикла.

Ø Команда: JQE/JZ - Jump if Equal / Jump if Zero -прыжок если равно / прыжок если ноль

Синтаксис: jeq label

jz label

Описание: Тестируется состояние бита Z статусного регистра SR. Если Z=1 осуществляется переход на метку label.

Флаги: Не модифицируются

Пример: Тестировать 7-й бит в регистре R10

bit #80h, R10BitIsZero

. . . .:

Ø Команда: JN - Jump if Negative -прыжок если минус

Синтаксис: jn label

Описание: Тестируется состояние бита N статусного регистра SR. Если N=1 осуществляется переход на метку label.

Флаги: Не модифицируются

Пример: В регистр R12 записать сумму всех положительных значений в блоке ОЗУ с начальным адресом 2A0h и размером 50 байт.

mov #0, R12 ; обнуляем сумму

mov #2A0h, R10 ; настраиваем указатель на начало блока ОЗУ

mov #50, R11 ; инициализируем счетчик циклов

loop: mov.b @R10+, R8 ; читаем данные во временный регистр

cmp #0, R8 ; сравниваем с 0

jn skip ; если минус, пропустить следующую команду

add R8, R12 ; накапливаем сумму

skip: sub #1, R11 ; считаем количество циклов

jnz loop ; если не все значения, переход на начало цикла

Ø Команда: JC/JHS - Jump if Carry set / Jump if Higher or Same -прыжок если флаг С установлен / прыжок если выше или равно

Синтаксис: jc label

jhs label

Описание: Тестируется состояние бита C статусного регистра SR. Если C=1 осуществляется переход на метку label. Команда JHS обычно используется после сравнения беззнаковых операндов.

Флаги: Не модифицируются

Ø Команда: JNC/JLO - Jump if Carry Not set / Jump if Lower -прыжок если флаг С сброшен / прыжок если ниже

Синтаксис: jnc label

jlo label

Описание: Тестируется состояние бита C статусного регистра SR. Если C=0 осуществляется переход на метку label. Команда JLO обычно используется после сравнения беззнаковых операндов.

Флаги: Не модифицируются

Пример: В регистр R15 записать количество единичных бит, содержащихся в регистре R12.

mov #16, R13 ; загружаем счетчик бит

mov #0, R15 ; обнуляем регистр результата

loop: rrc R12 ; сдвиг данных в бит C

jnc skip ; если C=0, пропустить след. команду

add #1, R15 ; увеличить результат

skip: sub #1, R13 ; все биты сдвинуты?

jne loop ; если нет - переход на начало цикла

Тот же результат можно получить, если в приведенном фрагменте две команды

jnc skip

add #1, R15

заменить одной:

addc #0, R15

Ø Команда: JGE - Jump if Greater or Equal -прыжок если больше или равно

Синтаксис: jge label

Описание: Если результат операции N^V равен 0, осуществляется переход на метку label. Команда JGE обычно используется после сравнения знаковых операндов.

Флаги: Не модифицируются

Пример: В регистр R12 записать максимальное знаковое значение, содержащееся в блоке памяти ОЗУ со стартовым адресом 200h и размером 100 слов.

mov #-32768, R12 ; инициализируем R12 наименьшим значением

mov #200h, R15 ; настраиваем указатель на начало блока

mov #100, R13 ; инициализируем счетчик циклов

loop: cmp @R15+, R12 ; сравниваем текущее слово с текущим

; максимумом

jge skip ; если меньше, пропускаем след. команду,

mov -2(R15), R12 ; иначе меняем текущий максимум

skip: sub #1, R13 ; проверяем окончание цикла

jne loop ; если цикл не закончен, переход на начало

; цикла

Ø Команда: JL - Jump if Less -прыжок если меньше

Синтаксис: jl label

Описание: Если результат операции N^V равен 1, осуществляется переход на метку label. Команда JGE обычно используется после сравнения знаковых операндов.

Флаги: Не модифицируются

Ø Команда: JMP - Jump -прыжок

Синтаксис: jmp label

Описание: Безусловный переход на метку label

Флаги: Не модифицируются

Все команды переходов в памяти занимают 2 байта и исполняются за два цикла.

Похожые стьтьи по экономике

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

Автономное регулирование
Развитие систем управления ДВС характеризуется автоматизацией все большего числа процессов и режимов: пуск и прогрев двигателя; минимальные крейсерские и номинальные режим ...

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

Разделы

© 2019 - www.frontinformatics.ru