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 | да |
Источник - число, регистр или переменная.
Приемник - регистр или переменная; не может быть переменной одновременно с источником.
Вычитает источник из приёмника, результат никуда не сохраняется, выставляются флаги CF, PF, AF, ZF, SF, OF.
Аналог AND, но результат не сохраняется. Выставляются флаги SF, ZF, PF.