rep movsd ;repz CMPSB , CMPSW , CMPSD

movsd是把ds:[si]开始的DWORD传送到es:[di]开始的内存中(将ds:[si]处的4个字节数据送到es:[di]处),如果DF标志为0则si、di分别加4;如果DF为1则si、di分别减4。REP前缀表示重复执行该指令,每次执行后cx减1,直到cx为0结束。REPZ与REP类似,主要用于cmps、scas等指令,除了判断cx之外还判断ZF标志,如果ZF为0则结束。由于movs指令不会影响DF标志,所以用repz前缀没有意义,处理器会将repz当作rep处理。

CMPSB用来比较字节,而CMPSW用来比较字,CMPSD用来比较双字。

CMPS DWORD PTR [ESI], [EDI] 
但是你记住CMPS指令只能用于比较ESI指向的内存和EDI指向的内存值。

还有一点注意,CMPS和我们的CMP指令的操作数是相反的,
CMP 目的操作数,源操作数
CMPS 源操作数, 目的操作数
我们最好使用其特定的版本也就是我们今天学习到的CMPSB , CMPSW , CMPSD 这样我们不容易出错。

此时我们通过
   mov   esi, source
   mov   edi, target
   cmpsd
   ja     xxxx
   jmp   xxxx2
  
   大家说这句指令执行完cmpsd后,ja xxxx 指令能实现跳转吗。     不知道大家还记得我们之前学习的标志位吗。那么如果我们之前的源数小于比较的数值的话,则产生借位,所以此时CF标志位=1. 而ja指令是不小于,那么它会检测我们的CF标志位,如果发现CF = 1,则表示我们的源数值小于。ja并没有实现,只有当cf = 0的时候ja才实现跳转。 所以我们的指令会执行到jmp xxxx2,跳转。

ja 是无符号的比较
jg是有符合的比较

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值