loop loope loopne有什么差别

最近在学32位汇编,在看到 loop和loope时有不太明白的地方,就去网上找例子,看到了这个解答



loop不用我多解释了吧?
loope和loopne就是比loop多了一个测试ZF标志位的东西
loope是只有在CX不等于0和ZF=1的情况下才执行循环
loopne是是只有在CX不等于0和ZF=0的情况下才执行循环
例子:
 assume cs:code,ds:data

data segment

buff db 12,45,67,23,0FFH

data ends

code segment
start:
 mov ax,data
 mov ds,ax

 mov bx,offset buff
 mov cx,100
circle:
 inc byte ptr [bx]
 inc bx
 cmp byte ptr [bx],0FFH
 loopne circle

 mov ax,4C00H
 int 21H

code ends

 end start

这个程序的作用是将一个以字符0FFH为结束符的整数数组的元素全部加一
我这个例子没有什么实际的意义,正常的程序不会用可能用到的数字做结束标记的
当cmp byte ptr [bx],0FFH中[bx]指向的字节就是0FFH的时候ZF就变成了0,这时候就算CX不是0,但由于ZF=1了,所以loopne执行循环的条件就不存在了,所以退出循环 
其实在我提供的那个例子里CX只起到了一个上限的作用,也就说如果数组的长度大于100的话,后面的元素就不管了
其实就是节省了一条jz或者是jnz指令 
翻译成C语言就是这样:
for (i=0;i<=XX;i++)
{
 ...
 if (XX) break;
 ...
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值