汇编语言LOOPNZ(非零跳转)和LOOPNE(不等跳转)指令
LOOPNZ(非零跳转)指令与 LOOPZ 相对应。当 ECX 中无符号数值大于零(减 1 操作之后)且零标志位等于零时,继续循环。指令语法如下:
【示例】扫描数组中的每一个数,直到发现一个非负数(符号位为 0)为止。注意,在执行 ADD 指令前要把标志位压入堆栈,因为 ADD 有可能修改标志位。然后在执行 LOOPNZ 指令之前,用 POPFD 恢复这些标志位:
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),其在内存中的位置正好紧接着该数组。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频