汇编系列22--标志寄存器与JCC指令
1、标志寄存器:EFLAGS

0:CF---进位标志--carry flag
2:PF---奇偶标志
4:AF---辅助进位标志
6:ZF---零标志
7:SF---符号标志
8:TF---单步标志--暂时用不到,学习如何实现调试器时学。
9:IF---中断使能标志--暂时用不到,学中断门的时候再学习。
10:DF---方向标志
11:OF---溢出标志
JCC指令--可修改EIP寄存器的值。
前面学习,修改EIP的指令有,JMP,CALL,RET。
JCC指令修改EIP不像JMP是无条件修改EIP的,而是根据标志寄存器里面的值决定的。
若想很好的理解JCC指令,要理解标志寄存器。


只统计最后一个字节1的个数,为偶数则P位为1,否则为0。







汇编 JCC指令表
JCC指条件跳转指令,CC就是指条件码。
| JCC指令 | 中文含义 | 英文含义 | 检查符号位 | 典型C应用 |
|---|---|---|---|---|
| JZ/JE | 若为0则跳转;若相等则跳转 | jump if zero;jump if equal | ZF=1 | if (i == j);if (i == 0); |
| JNZ/JNE | 若不为0则跳转;若不相等则跳转 | jump if not zero;jump if not equal | ZF=0 | if (i != j);if (i != 0); |
| JS | 若为负则跳转 | jump if sign | SF=1 | if (i < 0); |
| JNS | 若为正则跳转 | jump if not sign | SF=0 | if (i > 0); |
| JP/JPE | 若1出现次数为偶数则跳转 | jump if Parity (Even) | PF=1 | (null) |
| JNP/JPO | 若1出现次数为奇数则跳转 | jump if not parity (odd) | PF=0 | (null) |
| JO | 若溢出则跳转 | jump if overflow | OF=1 | (null) |
| JNO | 若无溢出则跳转 | jump if not overflow | OF=0 | (null) |
| JC/JB/JNAE | 若进位则跳转;若低于则跳转;若不高于等于则跳转 | jump if carry;jump if below;jump if not above equal | CF=1 | if (i < j); |
| JNC/JNB/JAE | 若无进位则跳转;若不低于则跳转;若高于等于则跳转; | jump if not carry;jump if not below;jump if above equal | CF=0 | if (i >= j); |
| JBE/JNA | 若低于等于则跳转;若不高于则跳转 | jump if below equal;jump if not above | ZF=1或CF=1 | if (i <= j); |
| JNBE/JA | 若不低于等于则跳转;若高于则跳转 | jump if not below equal;jump if above | ZF=0或CF=0 | if (i > j); |
| JL/JNGE | 若小于则跳转;若不大于等于则跳转 | jump if less;jump if not greater equal | SF != OF | if (si < sj); |
| JNL/JGE | 若不小于则跳转;若大于等于则跳转; | jump if not less;jump if greater equal | SF = OF | if (si >= sj); |
| JLE/JNG | 若小于等于则跳转;若不大于则跳转 | jump if less equal;jump if not greater | ZF != OF 或 ZF=1 | if (si <= sj); |
| JNLE/JG | 若不小于等于则跳转;若大于则跳转 | jump if not less equal;jump if greater | SF=0F 且 ZF=0 | if(si>sj) |
参考:https://www.cnblogs.com/zhwer/p/12283220.html

浙公网安备 33010602011771号