汇编系列22--标志寄存器与JCC指令

1、标志寄存器:EFLAGS

汇编系列22--标志寄存器与JCC指令

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指令,要理解标志寄存器。

汇编系列22--标志寄存器与JCC指令

 

 

 汇编系列22--标志寄存器与JCC指令

 

 

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

汇编系列22--标志寄存器与JCC指令

 

 汇编系列22--标志寄存器与JCC指令

 

 汇编系列22--标志寄存器与JCC指令

汇编系列22--标志寄存器与JCC指令

 

 汇编系列22--标志寄存器与JCC指令

 

 汇编系列22--标志寄存器与JCC指令

 

 汇编系列22--标志寄存器与JCC指令

汇编 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

上一篇:jump-game


下一篇:Web文件管理、私有云存储管理工具 DzzOffice