18. Команды условной передачи управления

Команды условного перехода имеют следующий синтаксис:

jcc метка_перехода

Межсегментная передача управления в условных переходах не допускается.

    Команды, позволяющие сформировать условие перехода

  • Арифметические
  • Команда СMP
  • Проверка флагов
  • Проверка регистра CS

Команда cmp также, как и команда sub, выполняет вычитание операндов и устанавливает флаги. Единственное, чего она не делает — это запись результата вычитания на место первого операнда.

cmp операнд_1,операнд_2 (compare)

— сравнивает два операнда и по результатам сравнения устанавливает флаги.
Примеры условного перехода для CMP op1, op2:
JE — Переход если равно(op1 = op2, то есть ZF = 1)
JL/JNGE — Переход если меньше(op1 < op2, то есть SF ≠ OF) JBE/JNA — Переход если ниже или равно(op1 ≤ op2 для беззнаковых, то есть CF = 1 или ZF = 1)

Команды условного перехода по состоянию флага:
Примеры:
JO — Переход если есть переполнение (OF=1)
JNP — Переход если нет четности (PF=0)

Команды условного перехода по состоянию регистра CX/ECX
Синтаксис этой команды условного перехода таков:

jcxz <короткая метка> (JumpifcxisZero) — переход, если cx ноль; 
jecxz <короткая метка> (JumpEqualecxZero) — переход, если ecx ноль.

Нужно отметить ограничение, свойственное команде jcxz/jecxz. В отличие от других команд условной передачи управления, команда jcxz/jecxz может адресовать только короткие переходы — на –128 байт или на +127 байт от следующей за ней команды.
Переход выполняется если сх = 0

Таблица условий переходов:

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

17.07.2015