标志寄存器EFLAGS一共有32位,在这32位中大部分是保留和给编写操作系统的人用的,一般情况下只需知道32位的低16位中的8位即可,图1-3列出了标志寄存器EFLAGS中需要了解的8个位的位置。
* OF(Overflow Flag):溢出标志,溢出时为1,否则置0。
* DF (Direction Flag):方向标志,在串处理指令中控制信息的方向。
* IF (Interrupt Flag) :中断标志
* AF (Auxiliary carry Flag) :辅助进位标志,有进位时置1,否则置0。
* ZF (Zero Flag) :零标志,运算结构为0时ZF位位置1,否则置0。
* SF (Sign Flag):符号标志,结果为负时置1,否则置0。
* CF (Carry Flag): 进位标志,进位时置1,否则置0。
* PF (Parity Flag): 奇偶标志。结果操作数中1的个数为偶数时置1,否则置0。
EFLAGS寄存器的用途
正如上面所说EFLAGS是实现条件判断和逻辑判断的一种机制,在汇编语言中一般不直接访问EFLAGS寄存器,而是通过指令的操作隐含访问EFLAGS寄存器,下面是一个利用EFLAGS寄存器的例子。
* OF(Overflow Flag):溢出标志,溢出时为1,否则置0。
* DF (Direction Flag):方向标志,在串处理指令中控制信息的方向。
* IF (Interrupt Flag) :中断标志
* AF (Auxiliary carry Flag) :辅助进位标志,有进位时置1,否则置0。
* ZF (Zero Flag) :零标志,运算结构为0时ZF位位置1,否则置0。
* SF (Sign Flag):符号标志,结果为负时置1,否则置0。
* CF (Carry Flag): 进位标志,进位时置1,否则置0。
* PF (Parity Flag): 奇偶标志。结果操作数中1的个数为偶数时置1,否则置0。
EFLAGS寄存器的用途
正如上面所说EFLAGS是实现条件判断和逻辑判断的一种机制,在汇编语言中一般不直接访问EFLAGS寄存器,而是通过指令的操作隐含访问EFLAGS寄存器,下面是一个利用EFLAGS寄存器的例子。
Cmp dword ptr [ebp+8],0 ;影响标志CF、ZF、SF、OF、AF和PF
Jz 00405898 ; 如果ZF等于1,则跳转到00405898