Win32asm обучение


Урок 7 - Условные переходы - часть 2


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)".

В таблице, 'Значение' показывает каким должен быть результат вычисления, чтобы произошел переход.

Перечень команд условного перехода для команды

cmp x, y

Опкод Значение(переход,если...) Условие
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

Все команды перехода имеют один операнд: смещение для перехода.

[наверх]




- Начало -  - Назад -  - Вперед -