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

相关推荐
女神下凡6 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
从零开始的嵌入式之旅6 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
老当益壮梁奶奶6 天前
ARM汇编学习笔记(六):【i.MX6ULL】时钟系统与定时器(EPIT & GPT)
c语言·arm开发·嵌入式硬件·学习·51单片机
昌原的儿子LEO7 天前
IMX6ULL 时钟系统与 EPIT/GPT 定时器原理与配置
arm开发·学习
sunoo-2297 天前
【ARM嵌入式学习笔记Day6】一文打通i.MX6ULL时钟体系:PLL/PFD/预分频+滞回比较器全解析
arm开发·笔记·vscode·单片机·imx6ull·汇编语言
M78佐菲7 天前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
sunoo-2297 天前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Doraemomo7 天前
IMX6ULL裸机开发——PWM
arm开发·嵌入式硬件·imx6ull
老当益壮梁奶奶7 天前
ARM汇编学习笔记(五):从按键轮询到 GIC 中断控制器(ARM Cortex-A7 )
arm开发·笔记·单片机·嵌入式硬件
M78佐菲7 天前
ARM学习笔记(五)
linux·arm开发·笔记·嵌入式硬件·学习