美文网首页
(32位汇编 八)标志寄存器

(32位汇编 八)标志寄存器

作者: 1301c72 | 来源:发表于2017-09-25 22:37 被阅读0次
    EFLAGS寄存器

    1. 进位标志CF(Carry Flag)

    如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

    MOV AL, 0xEF
    ADD AL, 2

    MOV AL, 0xFE
    ADD AL, 2

    2. 奇偶标志PF(Parity Flag)

    奇偶标志PF用于反映运算结果中(最低有效字节中)1个数的奇偶性。

    MOV AL, 3
    ADD AL, 3
    ADD AL, 2

    3. 辅助进位标志AF(Auxiliary Carry Flag)

    在发生下列情况时, 辅助进位标志AF的值被置为1,否则其值为0:
    (1)在字(worddword等)操作时,发生低字节向高字节进位或借位时;
    (2)在字节操作时,发生低4位向高4位进位或借位时。

    MOV EAX, 0x55EEFFFF
    ADD EAX, 2

    MOV AX, 5EFE
    ADD AX, 2

    MOV AL, 4E
    ADD AL, 2

    MOV AH, 4E
    ADD AH, 2

    4. 零标志ZF(Zero Flag)

    零标志ZF用来反映运算结果是否为0。
    如果运算结果为0, 则其值为1, 否则其值为0。在判断运算结果是否为0时,可使用此标志位。

    XOR EAX, EAX

    MOV EAX, 2
    SUB EAX, 2

    5. 符号标志SF(Sign Flag)

    符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

    MOV AL, 7F
    ADD AL, 2

    6. 溢出标志位OF(Overflow Flag)

    溢出标志OF用于反映有符号数加减运算所得结果是否溢出。
    如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则被清为0。

    最高位进位与溢出的区别:

    • 进位标志CF表示无符号数运算结果是否超出范围。
    • 溢出标志OF表示有符号数运算结果是否超出范围。

    溢出主要是给有符号运算使用的,在有符号的运算中,有如下的规律:

    • 正 + 正 = 正,如果结果是负数,则说明有溢出
    • 负 + 负 = 负,如果结果是正数,则说明有溢出
    • 正 + 负,永远都不会有溢出
    8位16进制表示

    总结:
    (1)无符号数:0……FF
    (2)有符号数: 正数:0……7F 负数:80……FF

    • 无符号、有符号都不溢出

    MOV AL, 8
    ADD AL, 8

    • 无符号溢出、有符号不溢出

    MOV AL, 0FF
    ADD AL, 2

    • 无符号不溢出、有符号溢出

    MOV AL, 7F
    ADD AL, 2

    • 无符号、有符号都溢出

    MOV AL, 0FE
    ADD AL, 80

    注意:计算机如何计算OF的值?
    比如 80 - 40

    mov al, 80
    sub al, 40
    
    相当于(减法相当于加法)
    mov al, 80
    add al, 0c0
    
    1000 0000
    1100 0000  // -40的补码
    ---------------
    符号位有进位:1(x)
    最高有效数值位(左起第二位)向符号位产生的进位:0(y)
    1 xor 0 == 1 所以 OF = 1 
    
    即OF == x xor y
    

    相关文章

      网友评论

          本文标题:(32位汇编 八)标志寄存器

          本文链接:https://www.haomeiwen.com/subject/tfvlextx.html