汇编程序跳转到c语言程序,汇编语言 跳转指令与C语言的条件分支

本文详细介绍了汇编语言中的跳转指令,包括无条件跳转`jmp`和条件跳转,并通过实例解释了如何在机器指令层面理解和编码这些指令。同时,讨论了C语言条件分支在汇编语言中的实现,通过`-fno-if-conversion`选项避免使用条件传输指令,以减少对处理器流水线的影响。文章还分析了条件数据传输指令的优势和潜在问题,例如计算开销、副作用和临界风险情况。
摘要由CSDN通过智能技术生成

跳转指令

跳转指令也是一个组的指令,称为j组。其中jmp为无条件跳转,其余为条件跳转

92e21a1bea89923ffcc4d18155dde6d8.png

上图为j组指令,可结合条件码访问指令加深理解

在机器指令水平上理解如何对跳转指令编码

ea09231f9649536c28ea553ca23b376c.png

如上图,通过反汇编软件得到机器指令与汇编语言,其中左边为机器指令编码,右边为对应汇编语言含义,最左边为每条机器指令地址

jmp指令的对应机器指令有两个字节:eb表示这是jmp指令,03描述跳转信息。值得注意的是,跳转指令进行编码时,采用相对位置编码,如03描述的就是偏移量

结合实例进行理解:在未执行jmp指令时,rip寄存器存储的地址为4004d5(rip寄存器存放即将加载的指令地址);执行jmp指令后,rip寄存器的值改为新的目标位置地址,目标位置=原先位置+偏移量,在此例子中为4004d5+03=4004d8。jg指令同理

存放相对位置意义:可获得更高灵活度,若存放绝对地址,分配地址可能改变;而相对位置一定不変

使用汇编语言的跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值