bl和ldr用作跳转指令的区别

本文探讨了ARM指令集中的bl和ldr在用作跳转指令时的区别。bl指令通过pc值加偏移量进行跳转,形成位置无关指令,适合在编码时避免全局和静态变量的使用。而ldr指令则从特定地址加载值作为新的pc值,属于位置相关跳转。通过反汇编示例,详细解析了两个指令在实际操作中的表现和计算过程。
摘要由CSDN通过智能技术生成

bl指令经过汇编编译器编译后形成的指令码表示:新的pc值为,从当前pc值开始(即pc+8),跳过offset* 4个字节位置。下面看反汇编:


当前pc值为:bldisable_watch_dog经过编译后机器码为0xeb000005,即offset为5条指令,偏移字节数为5*4=20=0x14。当前pc值为0x30000000+8=0x30000008。则指令执行后的pc值为:0x30000008+0x14=0x3000001c,即为disable_watch_dog标号的地址。

因此,bl和b指令被称为位置无关指令。在编码时要生成位置无关指令有两点要注意:

1.       跳转使用bl和b指令;2.C语言中不用全局变量和静态变量。

 

下面再看ldr用作跳转指令。ldr指令经过编译后指令码表示:新的pc值为一个固定地址的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值