X86汇编语言的分支和控制跳转指令

在使用高级语言例如java,C++,python来编写代码时,我们使用最多的莫过于分支跳转控制语句,例如if..else, switch..case, for()等,本节我们看看这些分支跳转语句如何在X86汇编语言下呈现。

程序其实由一系列控制流组成,当代码运行时如果某个条件满足,它会执行既定代码,如果不满足或者另一个条件满足,它又会执行另一部分代码。在控制跳转指令中,最常用的就是jmp指令,它让控制流直接跳转到具体设定的位置去执行那里的代码。这种跳转由于无需判断先决条件,因此也叫无条件跳转。

问题在于程序在逻辑设计上通常需要满足固定条件的跳转,例如提到的if..else就属于这种类型。在汇编语言层面就需要使用标志位来进行跳转前的条件判断。在汇编语言层面可以实现多达三十多种的条件跳转方式。我们先看几个例子:
jz addr #当标志寄存器上的ZF位设置成1时跳转到addr指定的地址
jnz addr #当标志位ZF为0时跳转到地址addr
je addr #经常跟在cmp指令后,cmp指令用于比对两个操作数是否相等,如果相等就将ZF标志位设置成1,于是je就跳转到地址addr
jne addr #使用cmp比对两个操作数,如果两个数值不相等则跳转到地址addr
jg addr #使用cmp比对两个有符号的操作数,如果第一个操作数比第二个大,那么跳转到地址addr
jng addr #使用cmp比对两个有符号的操作数,如果第一个不大于第二个则跳转到地址addr。
ja,jae 分别对应jg和jge,不同在于这两条指

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值