Команды условного перехода



Интродукция...
Не так давно я увлекся таким замечательным языком, как ассемблер. Почему? Наверное, я мазохист :) Но даже моего мазохизма не хватило бы, если б мне не повезло и я не натолкнулся на сайт Bitfry’а. Я послал автору пару писем с вопросами, Bitfry послал пару ответов... Так завязалась переписка. Через некоторое время Bitfry предложил мне роль бета-тестера его статей. Я согласился. С тех пор переписки стали довольно частыми. В одном из писем Bitfry предложил создать таблицу команд условного перехода. За неделю мы с ним сварганили то, что Вы видите ниже. Надеюсь, эта таблица поможет Вам в изучении ассемблера и исследовании защиты программ. Ведь только зная, как работает та или иная защита, можно найти ошибки и... создать более совершенную защиту от хакеров.


Таблица команд условного перехода
Имена: Логика.
Переход если:
Условие перехода
от мнимого
вычитания B из A
(CMP A,B):
Состояние
флагов
для перехода:
Для любых чисел:
JE
JZ
Равно
Нуль
A=B ZF=1
JNE
JNZ
Не равно
Не нуль
A<>B ZF=0
 
JP
JPE
Есть паритет
Паритет четности
См. примечание* PF=1
JNP
JPO
Нет паритета
Паритет нечетности
См. примечание* PF=0
 Для чисел со знаком:
JL
JNGE
Меньше
Не больше и не равно
A<B SF<>OF
JLE
JNG
Меньше или равно
Не больше
A<=B SF<>OF или ZF=1
JG
JNLE
Больше
Не меньше и не равно
A>B SF=OF и ZF=0
JGE
JNL
Больше или равно
Не меньше
A>=B SF=OF
 
JS Отрицательное A<B SF=1
JS Неотрицательное A>=B SF=0
 
JO Значение переполнено Не влияет OF=1
JNO Значение не переполнено Не влияет OF=0
Для чисел без знака:
JB
JNAE
JC
Меньше
Не больше и не равно
Был перенос старшего бита
A<B CF=1
JBE
JNA
JNC
Меньше или равно
Не больше
Не было переноса старшего бита
A<=B CF=1 или ZF=1
JA
JNBE
Больше
Не меньше и не равно
A>B CF=0 и ZF=0
JAE
JNB
Больше или равно
Не меньше
A>=B CF=0
 
JCXZ
JECXZ
Ноль в CX
Ноль в ECX
Не влияет CX=0
ECX=0

*Примечание: Здесь речь идёт не о чётности значения, а о чётности суммы включённых битов (учитывается только 8 младших).
Команды, которые влияют на P-флаг (CMP в том числе), действуют по следующей логике:
Если сумма вкл. восьми младших бит чётная, то PF=1
Если сумма вкл. восьми младших бит нечётная, то PF=0