本文主要是介绍EFLAGS寄存器和jcc指令简介及验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
EFLAGS寄存器和jcc指令简介及验证
-
EFLAGS寄存器简介
如上图所示常用的标志位只有9个,9个标志位的含义如下
-
CF标志位(第0位)又称进位标志位,指令操作使得目标操作数的最高位有进位时,进位标志位置为1,否则为0。表示无符号数运算结果是否超出范围,运算结果仍然正确
-
PF标志位(第2位)又称奇偶标志位,指令操作是的目标操作数的低字节(最低的8个bit位)有偶数个1时,奇偶标志位置为1,否则为0
-
AF标志位(第4位)又称辅助进位位,指令运算过程中,看最低的4位, 如果产生进位或者借位的时候,置1,否则置0
-
ZF标志位(第6位)又称零标志位,指令运算产生的结果为0时,零标位位为1,否则为0(表示运算结果不为0)
-
SF标志位(第7位)又称符号位,是指目标操作数高位的副本,也就是说目标最高位为1时,SF置为1,否则置为0
-
TF标记位(第8位)又称单步位,当TF=1时,处理器每次只执行一条指令,即单步执行
-
IF标志位(第9位)又称中断标志位,IF为1时可以响应外部的可屏蔽中断,为0时屏蔽外部的可屏蔽中断
-
DF标志位(第10位)又称方向标志位,当使用std指令把DF置为1时,用某些指令使用esi或edi时,地址方向由高到底(递减),反之地址方向由低到高(递增)
-
OF标志位(第11位)又称溢出标志位,指令产生的结果超出了有符号目的数的范围时,溢出标记位置为1,否则为0,表示有符号数运算结果是否超出范围,运算结果已经不正确
-
上图是Visual Studio中解析出来的EFLAGS寄存器中标志位的结果:
CY == CF (进位)
PE == PF(奇偶)
AC == AF(辅助进位)
ZR == ZF(零)
PL == SF(符号)
EI == IF(中断)
UP == DF(方向)
OV == OF(溢出)
助记符 | 说明 | 标志位/寄存器 |
---|---|---|
JC | 进位跳转 | CF=1 |
JNC | 无进位跳转 | CF=0 |
JZ | 为零跳转 | ZF=1 |
JNZ | 非零跳转 | ZF=0 |
JO | 溢出跳转 | OF=1 |
JNO | 无溢出跳转 | OF=0 |
JS | 有符号跳转 | SF=1 |
JNS | 无符号跳转 | SF=0 |
JP | 偶校验跳转 | PF=1 |
JNP | 奇校验跳转 | PF=0 |
JE | 相等跳转(左值==右值) | ZF=1 |
JNE | 不相等跳转(左值!=右值) | ZF=0 |
JCXZ | CX=0跳转 | CX=0 |
JECXZ | ECX=0跳转 | ECX=0 |
JRCXZ | RCX=0跳转 | RCX=0 |
JA | 无符号数大于跳转(leftOp>rightOp) | CF=0且ZF=0 |
JNBE | 无符号数不小于等于(就是大于)跳转(leftOp>rightOp) | CF=0且ZF=0 |
JAE | 无符号数大于或等于跳转(leftOp>=rightOp) | CF=0&ZF=0或CF=0&ZF=1 |
JNB | 无符号数不小于跳转(leftOp>=rightOp) | CF=0&ZF=0或CF=0&ZF=1 |
JB | 无符号数小于跳转(leftOp<rightOp) | CF = 1 |
JNAE | 无符号数不大于等于(就是小于)跳转(leftOp<rightOp) | CF = 1 |
JBE | 无符号数小于或等于跳转(leftOp<=rightOp) | ZF = 1 或 CF = 1 |
JNA | 无符号数不大于跳转(leftOp<=rightOp) | ZF = 1 或CF = 1 |
JG | 有符号数大于跳转(leftOp>rightOp) | SF = OF 且 ZF =0 |
JNLE | 有符号数不小于等于(left |
这篇关于EFLAGS寄存器和jcc指令简介及验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!