当前位置: 首页 > ds >正文

ARM子程序调用与返回

子程序(也叫过程、函数、方法)是一个能被调用和执行并返回到调用点那条指令的代码
段。

两个问题:如何将参数传递给子程序或从子程序中传递出来?怎么从子程序返回到调用点?

在这里插入图片描述
指令BSR Proc_A调用子程序Proc_A。
处理器将调用代码中要执行的下一条指令的地址保存到一个安全的地方,然后把目标地址
Proc_A,子程序的第一条指令,加载到程序计数器中。
把一个非顺序地址加载到PC就强制跳转到子程序中。
在子程序末尾,从子程序中返回指令RTS,使处理器返回到子程序调用点的下一条指令。

ARM对子程序的支持

ARM没有像CISC处理器那样提供全自动的子程序调用与返回机制。

ARM的分支并链接指令BL,自动将返回地址保存在寄存器r14中。

分支指令的格式中带有一个8位操作码和24位有符号的相对程序计数器的偏移量。由于分
支目标地址是一个字地址,分支地址按32位字边界对齐,因此将24位偏移量左移两位,把
字偏移地址转换成字节地址,然后26位字节地址被符号扩展成32位,并被加到PC上,由于
分支地址偏移量为26位(24+2),因此条件分支的寻址范围为PC-32M~PC+32M字节:

分支并链接指令与对应的分支指令基本相同,但它会返回地址(即调用指令后的下一条执
行指令的地址)复制到链接寄存器r14中,如:
BL Sub_A ;带链接跳转到Sub_A,保存返回地址到r14

ARM执行了分支指令,将跳转到标号Sub_A目标地址处,还会将寄存器r15中的值复制到
r14中,以保存返回地址。子程序的末尾通过把r14中保存的返回地址传送到PC中,其返回
到主程序。ARM无需特殊的返回指令,仅需简单的写成:
MOV pc,lr ; 也可写成MOV r15,r14

http://www.xdnf.cn/news/4215.html

相关文章:

  • vscode运行python的快捷键
  • VirtualBox调整虚拟机内存和CPU
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(八)
  • 智能体四项关键技术:MCP、A2A、ANP与函数调用的深度解析
  • 判断字符是否唯一 --- 位运算
  • 《冰雪三职业》:战士玩法攻略!
  • 精益数据分析(39/126):SaaS与移动应用商业模式的关键要点剖析
  • P6822 [PA 2012 Finals] Tax 题解
  • 【项目】基于ArkTS的网吧会员应用开发(2)
  • Qt天气预报系统更新UI界面
  • ansible基础-优化
  • 代码随想录算法训练营day9:字符串part02
  • 英伟达开源英语自动语音识别模型:nvidia/parakeet-tdt-0.6b-v2
  • android zxing QrCode 库集成转竖屏适配问题
  • 餐具瓷器品牌十大排名
  • Linux安装RTL8215网卡驱动
  • FreeRTOS系统CPU使用率统计
  • AutoGPT
  • GESP2024年3月认证C++八级( 第二部分判断题(6-10))
  • 柯西乘积定理(Cauchy Product Theorem)
  • C# 反射
  • [特殊字符] 大模型(LLMs)RAG 版面分析——文本分块面
  • 农经权二轮延包软件—摸底申请表生成
  • 数据库的并发控制
  • nats v2.11.3全新上线!MQTT支持增强、JetStream性能优化、关键BUG修复,构建高效可信消息中间件新时代
  • NV287NV291美光固态闪存NV293NV294
  • Deepseek基础-api key申请及应用(java)、硅基流动api key申请及应用(dify)
  • ThreadLocal源码深度剖析:内存管理与哈希机制
  • Lora原理介绍并用Macbook air超快实现本地微调小模型
  • AI日报 · 2025年5月05日|雅诗兰黛与微软合作成立 AI 创新实验室,加速美妆产品研发与营销