标志寄存器

文章目录

    • 一、进位标志cf
    • 二、奇偶标志PF
    • 三、辅助进位标志AF
    • 四、零标志ZF
    • 五、符号标志SF
    • 六、溢出标志OF
    • 七、方向位DF
    • 八、ADC代位加法
    • 九、SBB代位减法
    • 十、XCHG交换数据

一、进位标志cf

如果运算结果的最高位产生了一个进位或借位,那么,其值为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

奇偶标志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

在发生下列情况时,辅助标志AF的值为1,否则为0
1)、在字操作时,发生低字节向高字节进位或借位时,
2)、在字节操作时,发生低四位向高四位进位或借位时

MOV	EAX	,0X55EEFFFF		1111 1111 1111 1111(此时宽度32位,所以我们看F后面的)
ADD	EAX,2				0000 0000 0000 0001(最高位进位了,此时A位为1)

四、零标志ZF

零标志ZF反映运算结果是否为0,如果结果为零,则其值为1,否则为0

XOR EAX,EAX		结果为0(此时Z位为1)

五、符号标志SF

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

MOV AL,7F					0111 1111
ADD AL,2					1000 0001(最高位是1,所以S位为1)

六、溢出标志OF

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

正 + 正 = 正 如果结果是负数,则说明溢出
负 + 负 = 负 如果结果是正数,则说明溢出
正 + 负 永远都不会有溢出
下图是1个字节最大数(有符号位时的运算)
标志寄存器_第1张图片

七、方向位DF

MOVS和STOS运算时,D位为0时,寄存器EDI加法,否则EDI减法

八、ADC代位加法

ADC代位加法(此时C位为1)

MOV	EAX,1			00000001
MOV	ECX,2			00000002
ADC	EAX,ECX			结果为EAX的值为00000004,C位变为0

九、SBB代位减法

SBB代位减法(此时C位为1)
MOV	EAX,4			00000004
MOV	ECX,2			00000002
SBB	EAX,ECX			结果为EAX的值为00000001,C位变为0

十、XCHG交换数据

MOV		EAX,1						00000001
MOV		ECX,2						00000002
XCHG	EAX,ECX						结果是EAX:00000002
										 ECX:00000001

你可能感兴趣的:(笔记)