EFLAGS中的状态标志
EFLAGS的状态标志代表什么意思呢?它们代表的是算数指令(arithmetic instruction)的结果状态,算数指令就是大家熟悉的的加减乘除,ADD,SUB,MUL和DIV,当然还有很多其他指令暗含有这些基本的算数指令,比如cmp指令就暗含有sub操作,因此cmp也会影响状态标志。
typedef struct _EFLAGS
{
unsigned CF : 1; // 进位或错位
unsigned Reservel1 : 1; // 对Dr0保存的地址启用 全局断点
unsigned PF : 1; // 计算结果低位包含偶数个数1时 此标志位1
unsigned Reservel2 : 1; // 对Dr0保存的地址启用 全局断点
unsigned AF : 1; // 辅助进位标志 当位3处 有进位或结尾时 该标志为1
unsigned Reservel3 : 1; // 保留
unsigned ZF : 1; // 计算结果为0时 此标志位1
unsigned SF : 1; // 符号标志 计算结果为负时 该标志位1
unsigned TF : 1; // 陷阱标志 此标志为1时 CPU每次仅会执行一条指令
unsigned IF : 1; // 中断标志 为0时禁止响应(屏蔽中断) 为1回复
unsigned DF : 1; // 方向标志
unsigned OF : 1; // 溢出标志 计算结果超过表达范围为1 否则为0
unsigned IOPL : 2; //用于标明当前任务的I/0特权级
unsigned NT : 1; // 任务嵌套标志
unsigned Reservel4 : 1; // 对Dr0保存的地址启用 全局断点
unsigned RF : 1; // 调试异常相应标志位 为1禁止相应指令断点异常
unsigned VM : 1; // 为1时启用虚拟8086模式
unsigned AC : 1; // 内存对齐检查标志
unsigned VIF : 1; // 虚拟中断标志
unsigned VIP : 1; // 虚拟中断标志
unsigned ID : 1; // cpuID检查标志
unsigned Reservel5 : 1; // 保留
}EFLAGS, *PEFLAGS;
关系运算和条件跳转的对应