08. Команды условной и безусловной передачи управления. - mRrvz/bmstu-asm GitHub Wiki

Условный переход - переход, происходящий при выполнении какого-то условия.

Безусловный переход - переход, не зависящий от чего-либо (совершаемый в любом случае).

Виды безусловных переходов

JMP - оператор безусловного перехода.

Вид перехода Дистанция перехода
short (короткий) -128..+127 байт
near (ближний) в том же сегменте (без изменения CS)
far (дальний) в другой сегмент (со сменой CS)

Для короткого и ближнего переходов непосредственный операнд (число) прибавляется к IP. Регистры и переменные заменяют старое значение в IP (CS:IP).

Виды условных переходов

Не зависящие от знака

Команда Описание Состояние флагов для выполнения перехода
JO Есть переполнение OF = 1
JNO Нет переполнения OF = 0
JS Есть знак SF = 1
JNS Нет знака SF = 0
JE/JZ Если равно/если ноль ZF = 0
JNE/JNZ Если не равно/если не ноль ZF = 0
JP/JPE Есть четность/четное PF = 1
JNP/JPO Нет четности/нечетное PF = 0
JCXZ CX = 0

Беззнаковые

Команда Описание Состояние флагов для выполнения перехода Знаковый
JB/JNAE/JC Если ниже/если не выше и не равно/если перенос CF = 1 нет
JNB/JAE/JNC Если не ниже/если выше и равно/если перенос CF = 0 нет
JBE/JNA Если ниже или равно/если не выше CF = 1 или ZF = 1 нет
JB/JNAE/JC Если ниже/если не выше и не равно/если перенос CF = 1 нет
JA/JNBE Если выше/если не ниже и не равно CF = 0 и ZF = 0 нет

Знаковые

Команда Описание Состояние флагов для выполнения перехода Знаковый
JL/JNGE Если меньше/если не больше и не равно SF != OF да
JGE/JNL Если больше или равно/если не меньше SF = OF да
JLE/JNG Если меньше или равно/если не больше ZF = 1 или SF != OF да
JG/JNLE Если больше/если не меньше и не равно ZF = 0 и SF = OF да

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

CMP <приемник>, <источник>

Источник - число, регистр или переменная.
Приемник - регистр или переменная; не может быть переменной одновременно с источником.

Вычитает источник из приёмника, результат никуда не сохраняется, выставляются флаги CF, PF, AF, ZF, SF, OF.

TEST <приемник>, <источник>

Аналог AND, но результат не сохраняется. Выставляются флаги SF, ZF, PF.

⚠️ **GitHub.com Fallback** ⚠️