SF (Sign flag) Флаг знака
Если установлен, значит результат вычисления - отрицательное число.
CF (Carry flag) Флаг переноса
Флаг переноса, содержит крайний левый (старший) бит после вычислений.
OF (Overflow flag) Флаг переполнения
Указывает переполнение результата вычисления, т.е. результат больше, приемник.
Есть еще большое колличество флагов (флаг паритета (pf), вспомогательный флаг переноса (af), флаг трассировки (tf), флаг прерывания (if), флаг управления (df), флаг уровня привилегий ввода/вывода (iopl) , флаг вложенности задачи (nt), флаг возобновления (rf), флаг виртуального режима (vm)) но так как мы не будем их использовать, я не буду о них рассказывать.
7.2 - Переходы
Существует целая серия условных переходов и все они переходят в зависимости от состояния флагов. Поскольку большинство переходов имеют четкие названия, вам даже не нужно знать какие флаги должны быть установлены. "Jump if greater or equal" "переход если больше или равно" (jge) например тоже самое, что "Флаг знака = Флагу переполнения", а "Jump if zero" "Переход если нуль" (JZ) тоже самое, что "Переход, если флаг нуля = 1 (JZ)".
В таблице, 'Значение' показывает каким должен быть результат вычисления, чтобы произошел переход.
Опкод | Значение(переход,если...) | Условие |
JA | Jump if above (X > Y) | CF=0 & ZF=0 |
JAE | Jump if above or equal (X >= Y) | CF=0 |
JB | Jump if below (X < Y) | CF=1 |
JBE | Jump if below or equal (X < Y) | CF=1 or ZF=1 |
JC | Jump if carry (cf=1) | CF=1 |
JCXZ | Jump if CX=0 | регистр CX=0 |
JE (то же, что и JZ) | Jump if equal (X = Y) | ZF=1 |
JG | Jump if greater (signed) (X > Y) | ZF=0 & SF=OF |
JGE | Jump if greater or equal (signed) (X >= Y) | SF=OF |
JL | Jump if less (signed) (X < Y) | SF != OF |
JLE | Jump if less or equal (signed) (X <= Y) | ZF=1 or SF!=OF |
JMP | Безусловный переход | - |
JNA | Jump if not above (X <= Y) | CF=1 or ZF=1 |
JNAE | Jump if not above or equal (X < Y) | CF=1 |
JNB | Jump if not below (X >= Y) | CF=0 |
JNBE | Jump if not below or equal (X > Y) | CF=1 & ZF=0 |
JNC | Jump if not carry (cf=0) | CF=0 |
JNE | Jump if not equal (X != Y) | ZF=0 |
JNG | Jump if not greater (signed) (X <= Y) | ZF=1 or SF!=OF |
JNGE | Jump if not greater or equal (signed) (X < Y) | SF!=OF |
JNL | Jump if not less (signed) (X >= Y) | SF=OF |
JNLE | Jump if not less or equal (signed) (X > Y) | ZF=0 & SF=OF |
JNO | Jump if not overflow (signed) (of=0) | OF=0 |
JNP | Jump if no parity (pf=0) | PF=0 |
JNS | Jump if not signed (signed) (sf=0) | SF=0 |
JNZ | Jump if not zero (X != Y) | ZF=0 |
JO | Jump if overflow (signed) (of=1) | OF=1 |
JP | Jump if parity (pf=1) | PF=1 |
JPE | Jump if parity even ( | PF=1 |
JPO | Jump if parity odd | PF=0 |
JS | Jump if signed (signed) | SF=1 |
JZ | Jump if zero (X = Y) | ZF=1 |
Все команды перехода имеют один операнд: смещение для перехода.
[наверх]