34、ARM 处理器的子程序与栈机制解析

ARM 处理器的子程序与栈机制解析

1. 子程序基础概念

子程序是一段从程序内某点调用并执行,执行完毕后返回到调用点之后指令的代码。所有计算机都会使用子程序,但不同计算机为程序员提供的实现子程序的工具各有不同。

1.1 子程序调用与返回的实现方式

  • CISC 经典方式 :使用 BSR(跳转到子程序)和 RTS(从子程序返回)指令。示例代码如下:
bsr abc    @ 调用标记为 abc 的子程序
...
...
abc: ...    @ 子程序 abc 入口点
...
rts        @ 子程序 abc 返回调用点

这种方式简单直接,但大多数 RISC 处理器不采用,因为子程序调用和返回是复杂指令,调用时需将返回地址保存到栈中,返回时再从栈中取出,这虽方便程序员,但需多个 CPU 时钟周期执行,不符合 RISC 处理器单指令单周期的模式。

  • 简单子程序调用与返回(叶子子程序) :若只需简单的子程序调用与返回,可将返回地址保存到寄存器中(无需外部内存或栈),返回时将返回地址放入程序计数器,简单又快速。但在子程序中不能再次调用其他子程序,否则会破坏已保存的返回地址。

1.2 ARM 的分支链接指令

ARM 的子程序机制为分支链接,助记符为 bl target ,其中 target 是子程序的符号地

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值