ARM 处理器的子程序与栈机制解析
1. 子程序基础概念
子程序是一段从程序内某点调用并执行,执行完毕后返回到调用点之后指令的代码。所有计算机都会使用子程序,但不同计算机为程序员提供的实现子程序的工具各有不同。
1.1 子程序调用与返回的实现方式
- CISC 经典方式 :使用 BSR(跳转到子程序)和 RTS(从子程序返回)指令。示例代码如下:
bsr abc @ 调用标记为 abc 的子程序
...
...
abc: ... @ 子程序 abc 入口点
...
rts @ 子程序 abc 返回调用点
这种方式简单直接,但大多数 RISC 处理器不采用,因为子程序调用和返回是复杂指令,调用时需将返回地址保存到栈中,返回时再从栈中取出,这虽方便程序员,但需多个 CPU 时钟周期执行,不符合 RISC 处理器单指令单周期的模式。
- 简单子程序调用与返回(叶子子程序) :若只需简单的子程序调用与返回,可将返回地址保存到寄存器中(无需外部内存或栈),返回时将返回地址放入程序计数器,简单又快速。但在子程序中不能再次调用其他子程序,否则会破坏已保存的返回地址。
1.2 ARM 的分支链接指令
ARM 的子程序机制为分支链接,助记符为 bl target ,其中 target 是子程序的符号地
超级会员免费看
订阅专栏 解锁全文
4122

被折叠的 条评论
为什么被折叠?



