汇编JCC条件跳转指令记忆
汇编中的条件跳转指令(JCC
):
1. 理解标志寄存器
JCC
指令依赖于标志寄存器(FLAGS)的状态,常见的标志位有:
-
ZF(Zero Flag):结果为0时置1。
-
CF(Carry Flag):无符号数溢出时置1。
-
SF(Sign Flag):结果为负时置1。
-
OF(Overflow Flag):有符号数溢出时置1。
-
PF(Parity Flag):结果中1的个数为偶数时置1。
理解这些标志位的含义是记忆 JCC
的基础。
2. 分类记忆
将 JCC
指令分为几类,每类对应一种比较场景:
(1) 无符号数比较
-
JA/JNBE:高于/不低于等于时跳转(
A
= Above)。 -
JAE/JNB:高于等于/不低于时跳转(
AE
= Above or Equal)。 -
JB/JNAE:低于/不高于等于时跳转(
B
= Below)。 -
JBE/JNA:低于等于/不高于时跳转(
BE
= Below or Equal)。
记忆技巧:
-
A
表示“高于”,B
表示“低于”。 -
E
表示“等于”(Equal)。 -
N
表示“不”(Not)。
(2) 有符号数比较
-
JG/JNLE:大于/不小于等于时跳转(
G
= Greater)。 -
JGE/JNL:大于等于/不小于时跳转(
GE
= Greater or Equal)。 -
JL/JNGE:小于/不大于等于时跳转(
L
= Less)。 -
JLE/JNG:小于等于/不大于时跳转(
LE
= Less or Equal)。
记忆技巧:
-
G
表示“大于”,L
表示“小于”。 -
E
表示“等于”。 -
N
表示“不”。
(3) 零值判断
-
JE/JZ:等于/为零时跳转(
E
= Equal,Z
= Zero)。 -
JNE/JNZ:不等于/不为零时跳转(
NE
= Not Equal,NZ
= Not Zero)。
记忆技巧:
-
E
和Z
都表示“等于”或“为零”。 -
NE
和NZ
表示“不等于”或“不为零”。
(4) 标志位判断
-
JC:进位标志为1时跳转(
C
= Carry)。 -
JNC:进位标志为0时跳转(
NC
= Not Carry)。 -
JO:溢出标志为1时跳转(
O
= Overflow)。 -
JNO:溢出标志为0时跳转(
NO
= Not Overflow)。 -
JS:符号标志为1时跳转(
S
= Sign)。 -
JNS:符号标志为0时跳转(
NS
= Not Sign)。 -
JP/JPE:奇偶标志为1时跳转(
P
= Parity,PE
= Parity Even)。 -
JNP/JPO:奇偶标志为0时跳转(
NP
= Not Parity,PO
= Parity Odd)。
记忆技巧:
-
标志位的缩写直接对应指令名称(如
C
= Carry,O
= Overflow)。 -
N
表示“不”。
3. 总结规律
-
字母含义:
-
A
/B
:无符号数比较(Above/Below)。 -
G
/L
:有符号数比较(Greater/Less)。 -
E
:等于(Equal)。 -
Z
:为零(Zero)。 -
C
:进位(Carry)。 -
O
:溢出(Overflow)。 -
S
:符号(Sign)。 -
P
:奇偶(Parity)。
-
-
前缀:
-
J
:跳转(Jump)。 -
N
:不(Not)。
-
4. 练习与应用
-
编写简单的汇编代码,使用不同的
JCC
指令,观察其行为。 -
通过调试器(如 GDB)查看标志寄存器的变化,加深理解。
5. 记忆口诀
-
无符号:
A
(Above)高,B
(Below)低,E
等于别忘记。 -
有符号:
G
(Greater)大,L
(Less)小,E
等于要记牢。 -
零值:
E
等于Z
为零,NE
不等NZ
非零。 -
标志位:
C
进位O
溢出,S
符号P
奇偶。