如果运算结果的最高位
产生了一个进位或借位,那么,其值为1,否则为0(判断之前,先要确定宽度)
MOV AL 0xEF 1111 1110
ADD AL,1 1111 1111(最高位没有进位,此时C位为0)
MOV AL 0xFF 1111 1111
ADD AL,1 0000 0000(最高位进位了,此时C位为1)
奇偶标志PF用于反映运算结果中的1的个数
的奇偶性,
如果1
的个数为 偶数,则PF位为1,否则为0(只看最低有效字节,低八位)
MOV AL,3 0000 0011
ADD AL,3 0000 0110(1有两个,此时P位为1)
ADD AL,3 0000 1000(1有1个,此时P位为0)
在发生下列情况时,辅助标志AF的值为1,否则为0
1)、在字操作时,发生低字节向高字节进位或借位时,
2)、在字节操作时,发生低四位向高四位进位或借位时
MOV EAX ,0X55EEFFFF 1111 1111 1111 1111(此时宽度32位,所以我们看F后面的)
ADD EAX,2 0000 0000 0000 0001(最高位进位了,此时A位为1)
零标志ZF反映运算结果是否为0
,如果结果为零,则其值为1,否则为0
XOR EAX,EAX 结果为0(此时Z位为1)
符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同
MOV AL,7F 0111 1111
ADD AL,2 1000 0001(最高位是1,所以S位为1)
溢出标志OF用于反映有符号数加减运算所得结果是否溢出,如果运算结果超过当前运算位数所能表示的范围,则称为溢出,其值为1,否则为0
正 + 正 = 正 如果结果是负数,则说明溢出
负 + 负 = 负 如果结果是正数,则说明溢出
正 + 负 永远都不会有溢出
下图是1个字节最大数(有符号位时的运算)
MOVS和STOS运算时,D位为0时,寄存器EDI加法,否则EDI减法
ADC代位加法(此时C位为1)
MOV EAX,1 00000001
MOV ECX,2 00000002
ADC EAX,ECX 结果为EAX的值为00000004,C位变为0
SBB代位减法(此时C位为1)
MOV EAX,4 00000004
MOV ECX,2 00000002
SBB EAX,ECX 结果为EAX的值为00000001,C位变为0
MOV EAX,1 00000001
MOV ECX,2 00000002
XCHG EAX,ECX 结果是EAX:00000002
ECX:00000001