一步一步写ARM汇编(二)

本文详细介绍了ARM汇编语言中的跳转指令b与bl的功能及使用方法。通过示例代码展示了如何利用bl指令进行过程调用并保存返回地址,以及如何使用b指令实现无条件跳转。同时,还探讨了bl指令的偏移量计算方式、寻址范围限制以及通过ldr指令访问超出范围内存的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

b与bl

b     无条件跳转,不考虑回来的问题

bl    在跳转时会把下一条指令的地址装载到lr寄存器中,以方便cpu最终能回来

 

示例:通过bl跳到func,通过b跳到over,通过调试查看lr值,示例代码如下,

       area example,code,readonly

       entry

 

start

 

       ;bl和b

       mov r0,#0x1

 

       bl func

       mov r2,#0x3

       b over

 

func

       mov r1,#0x2

       bx lr

 

over

       b over

       end

 

提高:程序在执行时,先跳到func1, 再跳到func2,再跳到func3,然后再返回主程序继续执行。示例代码如下,

       area example,code,readonly

       entry

 

start

 

       mov r0,#0x1

       bl func1

       mov r0,#0x2

       b over

 

func1

       mov r1,lr

       bl func2

       mov r0,#0x3

       mov pc,r1

 

func2

       mov r2,lr

       bl func3

       mov r0,#0x04

       mov pc,r2

 

func3

       mov r0,#0x05

       bx lr

 

over

       b over

       end       

 

注1:bl指令的偏移量不是相对于正在执行的那条指令,而是相对于预取指令-三级流水线

注2:bl命令,最大寻址空间为±32M,访问其他内存通过ldr指令

注3:进入子函数,通过栈保存返回地址+通用寄存器的值                                                                                                                                                                    

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值