标志寄存器
标志寄存器
EFLAGS
一、重要的标志寄存器
名称 | 名称 | 位置 |
---|---|---|
CF | 进位标志 | 0 |
PF | 奇偶标志 | 2 |
AF | 辅助进位标志 | 4 |
ZF | 零标志 | 6 |
SF | 符号标志 | 7 |
DF | 方向标志 | 10 |
OF | 溢出标志 | 11 |
二、标志寄存器详细
2.1 进位标志CF(Carry Flag)
如果运算结果的最高位
产生了一个进位或借位,那么,其值为1,否则其值为0。
相关指令:
MOV AL,0xEF
ADD AL,2
MOV AL,0xFE
ADD AL,2
2.2 奇偶标志PF(Parity Flag)
奇偶标志PF用于反映运算结果中1
的个数的奇偶性。如果最低字节中1
的个数为偶数时则其值为1,否则其值为0。
相关指令:
MOV AL,3
ADD AL,3
ADD AL,2
2.3 辅助进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0。
- 在字操作时,发生低字节向高字节进位或借位时
- 在字节操作时,发生低4位向高4位进位或借位时
相关指令:
MOV EAX,0x55EEFFFF
ADD EAX,2
MOV AX,5EFE
ADD AX,2
MOV AL,4E
ADD AL,2
2.4 零标志ZF(Zero Flag)
零标志ZF用来反映运算结果是否为0。
如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
相关指令:
XOR EAX,EAX
MOV EAX,2
SUB EAX,2
2.5 符号标志SF(Sign Flag)
符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
相关指令:
MOV AL,7F
ADD AL,2
2.6 溢出标志OF(Overflow Flag)
溢出标志OF用于反映有符号数加减运算所得结果是否溢出。
如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
最高位进位与溢出的区别:
- 进位标志表示无符号数运算结果是否超出范围
- 溢出标志表示有符号数运算结果是否超出范围
溢出主要是给有符号运算使用的,在有符号的运算中,有如下的规律:
- 正 + 正 = 正 如果结果是负数,则说明有溢出
- 负 + 负 = 负 如果结果是正数,则说明有溢出
- 正 + 负 永远都不会有溢出.
相关指令:
无符号,有符号都不溢出
MOV AL,8
ADD AL,8
无符号溢出,有符号不溢出
MOV AL,0xFF
ADD AL,2
无符号不溢出,有符号溢出
MOV AL,0x7F
ADD AL,2
无符号,有符号都溢出
MOV AL,0xFE
ADD AL,80