汇编语言条件跳转简介
x86 指令集中没有明确的高级逻辑结构,但是可以通过比较和跳转的组合来实现它们。
执行一个条件语句需要两个步骤:
下面是一些例子。
【示例 1】本例中的 CMP 指令把 EAX 的值与 0 进行比较,如果该指令将零标志位置 1,则 JZ(为零跳转)指令就跳转到标号 L1:
CPU 状态标志位最常见的设置方法是通过算术运算、比较和布尔运算指令。条件跳转指令评估标志位状态,利用它们来决定是否发生跳转。
用 CMP 指令 假设当 EAX=5 时,跳转到标号 L1。在下面的例子中,如果 EAX=5,CMP 指令就将零标志位置 1;之后,由于零标志位为 1,JE 指令就跳转到 L1:
下例中,由于 AX 小于 6,所以 JL 指令跳转到标号 L1:
执行一个条件语句需要两个步骤:
- 第一步,用 CMP、AND 或 SUB 操作来修改 CPU 状态标志位;
- 第二步,用条件跳转指令来测试标志位,并产生一个到新地址的分支。
下面是一些例子。
【示例 1】本例中的 CMP 指令把 EAX 的值与 0 进行比较,如果该指令将零标志位置 1,则 JZ(为零跳转)指令就跳转到标号 L1:
cmp eax, 0
jz L1 ;如果 ZF=1 则跳转
.
.
L1:
and dl,10110000b
jnz L2 ;如果 ZF=0 则跳转
.
.
L2 :
Jcond 指令
当状态标志条件为真时,条件跳转指令就分支到目标标号。否则,当标志位条件为假时,立即执行条件跳转后面的指令。语法如下所示:Jcond destination
cond 是指确定一个或多个标志位状态的标志位条件。下面是基于进位和零标志位的例子:JC | 进位跳转(进位标志位置 1) |
JNC | 无进位跳转(进位标志位清零) |
JZ | 为零跳转(零标志位置 1) |
JNZ | 非零跳转(零标志位清零) |
CPU 状态标志位最常见的设置方法是通过算术运算、比较和布尔运算指令。条件跳转指令评估标志位状态,利用它们来决定是否发生跳转。
用 CMP 指令 假设当 EAX=5 时,跳转到标号 L1。在下面的例子中,如果 EAX=5,CMP 指令就将零标志位置 1;之后,由于零标志位为 1,JE 指令就跳转到 L1:
cmp eax,5
je L1 ;如果相等则跳转
下例中,由于 AX 小于 6,所以 JL 指令跳转到标号 L1:
mov ax, 5
cmp ax, 6
jl L1 ;小于则跳转
mov ax,5
cmp ax,4
jg L1 ;大于则跳转
所有教程
- 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视频