1.标志寄存器(EFLAGS register)
- 一个32位的寄存器
- 用于反映处理器的状态和运算结果的某些特征
- 可以暂时认为主要是,状态标志和控制标志
- 低端16位对应8086的FLAGS寄存器
2.标志寄存器的低16位(FLAGS register)
- 一组状态标志
- 一组系统标志
- 一个控制标志
状态标志
CF:进位标志(Carry Flag)
加法
二进制角度,如果两个**无符号数**相加<br /> 最高位进位,CF=1<br /> 最高位不进位,CF=0<br /> 如果是减法转换过来的补码加法<br /> 最高位进位,CF=0<br /> 最高位不进位,CF=1
减法
二进制角度,如果两**无符号数**相减,最高位向前游位(借位),则CF=1,否则CF=0<br />**ZF:零标志(Zero Flag)**<br />**结果运算是否为0**
为0,ZF=1
- 不为0,ZF=0
SF:符号标志(Sign Flag)
SF与运算结果的最高位相同
- 最高位为1,SF=1
- 最高位为0,SF=0
OF:溢出标志(Overflow Flag)
针对有符号数的溢出
字节运算时大于127或小于-128
字运算时大于32767或-32768
双字运算大于2147483647或小于-2147483648
光看数值范围大小也不一定正确判断是否发生OP溢出
OF = Cn ⊕ Cn-1
Cn和Cn-1是指x+y或x-y结果补码的最高有效位以及次高有效位的进位情况,若有进位,该值为1,否则为0
PF:奇偶标志(Parity Flag)
运算结果的最低字节中含有1的位数
- 是偶数,PF为1
- 是奇数,PF为0
AF:辅助进位标志(Auxiliary Carry Flag)
运算过程中看最后四位,不论长度为多少,最后四位
- 向前有进位或者借位,AF=1
- 向前没有进位或者借位,AF=0
在补码加法中
- 向前有进位或者借位,AF=0
- 向前没有进位或者借位,AF=1
.386
.model flat,C
.code
start:
mov ax,8899h
add al,ah
CLC ;CF=0
stc ;CF=1
cmc ;CF取反
end start