/*
* ja
*/
"jump if above",大于则跳转。
JA是使用CF标志位来决断的。
cmp ebx, edx
ja short ntdll.7c962559
这表明EDX和EBX中的值都是被当作无符号数处理的。因为如果是有符号数,编译器应该用JG指令才对。
JG才是这条指令的有符号数版本。
/*
* jle
*/
JLE, "Jump if Less or Equal".
如果上一条CMP指令的第一个操作表达式小于或等于(不大于)第二个表达式,JLE将跳转到指令所标明的地址;
如果不满足上述条件,则运行下一条指令。
/*
* jne
*/
JNE,"Jump if Not Equal".
如果上一条CMP的两个操作符不相等,则进行相应跳转。
/*
* jge
*/
JGE,"Jump if Greater of Equal".
如果CMP的第一个表达式大于或等于第二个表达式(不小于),则进行跳转。
/*
* JA/JAE/JB/JBE 与 JG/JGE/JL/JLE 的区别
*/
JBE (jump if Below or Equal, 相当于JLE) 和 JAE (Jump if Above or Equal, 相当于JGE)。
JA/JAE/JB/JBE 与 JG/JGE/JL/JLE 的区别?
在于它们检查的标志位不同: 前者检查借/进位标志位CF(1意味着小于) 和零标志位ZF(1意味着相等),后者检查"SF XOR OF" (1意味着异号)
和ZF。前者适用于unsigned类型数据的(CMP)运算,而后者的适用于signed类型数据的运算。