揰掵佲 发表于 2021-7-9 08:34:15

认识标志寄存器:CF/PF/AF/ZF/SF/OF


[*]进位标志*F(Carry Flag):如果加法运算结果的最高位产生了一个进位,或者在减法运算过程中最高位不够减,向最高位的前面一位进行了借位,那么其值为1,否则为0
[*]例1:观察Mov al,0xEF 丨 ADD,al,2的结果
[*]例2:观察Mov al,0xFE 丨 ADD,al,2的结果

[*]奇偶标志PF(Parity Flag):奇偶标志PF用于反映运算结果的最低有效字节中1的个数的奇偶性。如果1的个数为偶数,则PF的值为1,否则为0.
[*]MOV AL,3
[*]ADD AL,3
[*]ADD AL,2

[*]辅助进位标志AF(Auxiliary Carry Flag):在发生下列情况时,辅助进位标志AF的值为1,否则为0
[*]1.在字操作时,发生低字节向高字节进位或借位时
[*]2.在字节操作时,发生低4位向高4位进位或借位时
[*]例1:观察Mov eax,0x55EEFFFF 丨 ADD EAX,2的结果
[*]例2:观察MOV AX,5FEF 丨 ADD AX,2的结果
[*]例3:观察MOV AL,4E 丨 ADD AL,2

[*]零标志ZF(zero Flag):零标志位用来反映运算结果是否为0,如果运算结果是0,那么其值为1,否则为0.在判断运算结果是否为0时可以使用此标志位
[*]例1:XOR EAX,EAX
[*]例2:MOV EAX,2 丨 SUB EAX,2

[*]符号标志SF(Sign Flag):符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
[*]例1:MOV AL,7F
[*]例2:ADD AL,2

[*]溢出标志位OF(Overflow Flag):溢出标志位OF用于反映有符号数加减运算所得到的结果是否溢出,如果运算结果超出当前位数所能表示的范畴,则称为溢出,OF的值被置为1,否则OF的值为0,在具体运算过程中OF会进行两个判断,分别为:一.符号位有没有进位,有进位得到1,无进位得到0,二.最高有效数值位向符号位产生的进位,有进位得到1,无进位得到0,最后将上述两个结果进行异或运算(xor),若运算结果为1,则将oF置为1,否则为0
[*]最高位进位与溢出的区别
[*]进位标志*F表示无符号数运算结果是否超出范围
[*]溢出标志OF表示有符号数运算结果是否超出范围
[*]溢出标志主要是给有符号运算使用的,在有符号运算中有如下规律
[*]正 + 正 = 正,倘若结果为负,则说明有溢出
[*]负 + 负 = 负,倘若结果为正,则说明有溢出
[*]正 + 负永远不会溢出



页: [1]
查看完整版本: 认识标志寄存器:*F/PF/AF/ZF/SF/OF