2025年4月3日 星期四 乙巳(蛇)年 正月初四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 汇编

汇编语言LOOPNZ(非零跳转)和LOOPNE(不等跳转)指令

时间:03-05来源:作者:点击数:59

LOOPNZ(非零跳转)指令与 LOOPZ 相对应。当 ECX 中无符号数值大于零(减 1 操作之后)且零标志位等于零时,继续循环。指令语法如下:

LOOPNZ destination

LOOPNE(不等跳转)指令相当于 LOOPNZ 它们有相同的操作码。这两条指令执行如 下任务:

ECX = ECX - 1
if ECX > 0 and ZF = 0, jump to destination

否则,不发生跳转,并将控制传递到下一条指令。

【示例】扫描数组中的每一个数,直到发现一个非负数(符号位为 0)为止。注意,在执行 ADD 指令前要把标志位压入堆栈,因为 ADD 有可能修改标志位。然后在执行 LOOPNZ 指令之前,用 POPFD 恢复这些标志位:

  • .data
  • array SWORD -3,-6,-1,-10,10,30,40,4
  • sentinel SWORD 0
  • .code
  • main PROC
  • mov esi,OFFSET array
  • mov ecx,LENGTHOF array
  • next:
  • test WORD PTR [esi],8000h ; 测试符号位
  • pushfd ; 标志位入栈
  • add esi,TYPE array ; 移动到下一个位置
  • popfd ; 标志位出栈
  • loopnz next ; 继续循环
  • jnz quit ; 没有发现非负数
  • sub esi,TYPE array ; ESI 指向数值
  • quit:

如果找到一个非负数,ESI 会指向该数值。如果没有找到一个正数,则只有当 ECX=0 时才终止循环。在这种情况下,JNZ 指令跳转到标号 quit,同时 ESI 指向标记值(0),其在内存中的位置正好紧接着该数组。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门