ZF 判断结果是否等于0 结果为0时ZF=1 结果不为0时ZF=0
PF 判断结果中1的个数是否为偶数 如果1的个数为偶数 PF=1,1的个数为奇数表示PF=0
SF 判断结果是否为负数
CF 判断(无符号运算)是否产生进位,借位
OF 判断(有符号运算)是否产生溢出,上溢出,下溢出
adc 带进位的加法
adc ax,bx
ax=ax+bx+CF
sbb 带借位的减法
sbb ax,bx
ax=ax-bx-CF
cmp ax,bx
进行ax-bx 不改变操作数 设置标志位
eg1:(无符号)
ax=bx zf=1
ax!=bx ax=0
ax<bx ax-bx必产生借位 cf =1
ax>=bx cf=0
ax>bx cf=0 zf=0
ax<=bx cf=1 或 zf=1
反之
zf=1 ax=bx
zf=0 ax!=bx
cf=1 ax<bx
cf=0 ax>=bx
cf=0 && zf=0 ax>bx
cf=1 || zf=1 ax<=bx
eg2:对于有符号来说
cmp ah,bh
ah=bh zf=1
ah!=bh zf=0
要根据of和sf来判断ah和bh的大小关系
a. sf=1 of=0 of=0表示逻辑上真正的结果等于实际的正负
比如 -3-1=-4 ah<bh
b. sf=1 of=1 of=1逻辑上真正的正负和实际相反
比如 126-(-10)=-120 ah>bh
c. sf=0 of=1 of=1逻辑上的正负和实际相反
逻辑结果由于溢出为正,实际结果为负 所以 ah<bh
d. sf=0 of=0
3-2=1 ah>=bh
所以 sf^of=1 表示ah<bh
由cmp产生的条件跳转相关指令:
je zf=1则转移
jne
jb 低于则转移(below) , cf=1
jnb
ja 高于则转移(above),cf=0 && zf=0
jna 不高于(小于等于则转移) cf=0
jg
jl
DF标志与串传送指令
df=0 si,di 递增
df=1 si,di 递减
串传送指令 movsb
它等价于 mov es:[di],byte ptr ds:[si] (实际不存在)
movsw 每次传送一个字
一般movsb和movsw都和rep配合使用
eg: rep movsb
它等价于
s: movsb
loop s
由此产生设置df的两条汇编语句
cld: df=0
std: df=1
pushf & popf
pushf将标志寄存器压栈 popf从栈中弹出数据送入标志寄存器
下面是标志寄存器在debug中的表示方法