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)在字(word
、dword
等)操作时,发生低字节向高字节进位或借位时;
(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
表示有符号数运算结果是否超出范围。
溢出主要是给有符号运算使用的,在有符号的运算中,有如下的规律:
- 正 + 正 = 正,如果结果是负数,则说明有溢出。
- 负 + 负 = 负,如果结果是正数,则说明有溢出。
- 正 + 负,永远都不会有溢出
总结:
(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