标志寄存器相关


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中的表示方法




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值