首先,asm代码是从规定好的_start标签开始逐行运行。
如果想实现调用子函数并返回的效果,需要做两步:
1. 使用 bl 函数名 的方式跳转到该函数中执行,其中b为跳转,l为跳转前将bl 函数名 下一条的地址写入lr 。
2. 在执行完子函数时,需要将lr中的地址写入pc中,才能实现返回效果。
e.g. 一个简单的例子
.global _start @ 将_start设置为全局标签,好让链接器所正确识别
_start:
bl test
loop:
b loop
test:
ldr r0, =0X0209C000
mov pc, lr @ 返回到_start 中,下一条指令执行 b loop