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

Мнемоническое обозначение некоторых команд условного перехода отражает название флага, с которым они работают, и имеет следующую структуру: первым идет символ “ 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 байт от следующей за ней команды.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: