вторник, 10 марта 2009 г.

x86: Условные переходы

КомандаJump if ...Условие при сравнении
cmp x, y
Условие перехода
(состояние флагов)
ja
jnbe
Above
Not Below or Equal
x > yCF = 0 and ZF = 0
jae
jnb
jnc
Above or Equal
Not Below
Not Carry
x ≥ yCF = 0
jb
jnae
jc
Below
Not Above or Equal
Carry
x < yCF = 1
jbe
jna
Below or Equal
Not Above
x ≤ yCF = 1 or ZF = 1
je
jz
Equal
Zero
x = yZF = 1
jne
jnz
Not Equal
Not Zero
x != yZF = 0
jg
jnle
Greater
Not Less or Equal
x > y
(знаки учитываются)
SF = OF and ZF = 0
jge
jnl
Greater or Equal
Not Less
x ≥ y
(знаки учитываются)
SF = OF
jl
jnge
Less
Not Greater or Equal
x < y
(yзнаки учитываются)
SF != OF
jle
jng
Less or Equal
Not Greater
x ≤ y
(знаки учитываются)
SF != OF or ZF = 1
jsSignedSF = 1
jnsNot SignedSF = 0
joOverflowOF = 1
jnoNot OverflowOF = 0
jp
jpe
Parity
Parity Even
PF = 1
jnp
jpo
Not Parity
Parity Odd
PF = 0
jcxzCX ZeroCX = 0

Многие условные переходы имеют по несколько имен. Например, ja (больше) и jnbe (не меньше и не равно) обозначают одно и то же. je и jz также являются одинаковыми командами. Обычно если, сравнивают два аргумента, используют je, чтобы показать, что переход произойдет, если аргументы равны. Если сравнивают аргумент с нулем, тогда используют jz.

Комментариев нет:

Отправить комментарий