1.标志寄存器(EFLAGS register)

    • 一个32位的寄存器
    • 用于反映处理器的状态和运算结果的某些特征
    • 可以暂时认为主要是,状态标志和控制标志
    • 低端16位对应8086的FLAGS寄存器

    image.png
    2.标志寄存器的低16位(FLAGS register)image.png

    • 一组状态标志
    • 一组系统标志
    • 一个控制标志

    状态标志
    image.png
    CF:进位标志(Carry Flag)

    • 加法

      1. 二进制角度,如果两个**无符号数**相加<br /> 最高位进位,CF=1<br /> 最高位不进位,CF=0<br /> 如果是减法转换过来的补码加法<br /> 最高位进位,CF=0<br /> 最高位不进位,CF=1
    • 减法

      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
      1. .386
      2. .model flat,C
      3. .code
      4. start:
      5. mov ax,8899h
      6. add al,ah
      7. CLC ;CF=0
      8. stc ;CF=1
      9. cmc ;CF取反
      10. end start