Мнемоническое обозначение некоторых команд условного перехода отражает название флага, с которым они работают, и имеет следующую структуру: первым идет символ “ j ” (jump, переход), вторым — либо обозначение флага, либо символ отрицания “ n ”, после которого стоит название флага.
Такая структура команды отражает ее назначение. Если символа “n” нет, то проверяется состояние флага, и если он равен 1, производится переход на метку перехода. Если символ “n” присутствует, то проверяется состояние флага на равенство 0, и в случае успеха производится переход на метку перехода.
Мнемокоды команд, названия флагов и условия переходов приведены в табл. 3. Эти команды можно использовать после любых команд, изменяющих указанные флаги.
Таблица 3. Команды условного перехода и флаги
Название флага | Номер бита в eflags/flag | Команда условного перехода | Значение флага для осуществления перехода |
Флаг переноса cf | jc | cf = 1 | |
Флаг четности pf | jp | pf = 1 | |
Флаг нуля zf | jz | zf = 1 | |
Флаг знака sf | js | sf = 1 | |
Флаг переполнения of | jo | of = 1 | |
Флаг переноса cf | jnc | cf = 0 | |
Флаг четности pf | jnp | pf = 0 | |
Флаг нуля zf | jnz | zf = 0 | |
Флаг знака sf | jns | sf = 0 | |
Флаг переполнения of | jno | of = 0 |
Если внимательно посмотреть на табл. 2 и 3, видно, что многие команды условного перехода в них являются эквивалентными, так как в основе и тех, и других лежит анализ одинаковых флагов.
|
|
Команды условного перехода и регистр ecx/cx
Архитектура микропроцессора предполагает специфическое использование многих регистров.
К примеру, регистр eax/ax/al используется как аккумулятор, а регистры bp, sp - для работы со стеком.
Регистр ecx/cx тоже имеет определенное функциональное назначение — он выполняет роль счетчика в командах управления циклами и при работе с цепочками символов. Возможно, что функционально команду условного перехода, связанную с регистром ecx/cx, правильнее было бы отнести к этой группе команд. Синтаксис этой команды условного перехода таков:
jcxz метка_перехода (Jump if cx is Zero) — переход, если cx ноль;
jecxz метка_перехода (Jump Equal ecx Zero) — переход, если ecx ноль.
Эти команды очень удобно использовать при организации цикла и при работе с цепочками символов.
Нужно отметить ограничение, свойственное команде jcxz/jecxz. В отличие от других команд условной передачи управления, команда jcxz/jecxz может адресовать только короткие переходы — на –128 байт или на +127 байт от следующей за ней команды.