ARM Architecture Procedure Call Standard(ARM架构过程调用标准)

AAPCS的核心是对ARM处理器中16个通用寄存器(R0-R15)的用途进行了严格定义。

寄存器 别名 角色与用途 谁负责保存?
R0 - R3 A1 - A4 参数与结果寄存器 :用于传递函数的前4个参数。R0和R1也用于返回结果。 调用者 (Caller)
R4 - R11 V1 - V8 变量寄存器 :用于存放函数的局部变量 被调用者 (Callee)
R12 IP 内部过程调用暂存寄存器:用作函数内部的临时存储。 调用者 (Caller)
R13 SP 栈指针 (Stack Pointer):指向当前栈顶。 -
R14 LR 链接寄存器 (Link Register) :保存函数的返回地址 -
R15 PC 程序计数器 (Program Counter):指向当前执行的指令。

关键机制:参数如何传递?

这是你之前最关心的一点,AAPCS的规则非常明确:

  • 参数 ≤ 4个 :直接通过 R0, R1, R2, R3 这四个寄存器传递,效率最高。

  • 参数 > 4个前4个参数 仍通过 R0-R3 传递,第5个及之后的参数 会被压入堆栈(Stack) 中传递。

此外,AAPCS还规定了:

  • 返回值 :通常放在 R0 寄存器中返回。

  • 64位参数/返回值 :可能会使用 R0和R1 组合来传递。

  • 堆栈使用:规定了栈的增长方向(通常是向低地址增长)以及如何在函数调用期间保存和恢复寄存器状态。

相关推荐
Navigator_Z7 小时前
LeetCode //MySQL - 1251. Average Selling Price
c语言·算法·leetcode
Escalating_xu9 小时前
【C语言数据类型和变量·上】从内置类型到变量模型:一次讲透 sizeof、signed/unsigned 与作用域
c语言
aramae9 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
多弗朗皮卡丘12 小时前
数据结构9:排序算法
c语言·数据结构·排序算法
老当益壮梁奶奶15 小时前
ARM 汇编学习笔记(二)启动代码、指令、函数调用与 C 混合编程
c语言·arm开发·单片机·嵌入式硬件·51单片机
wuminyu17 小时前
Markword在紧凑对象头上的实现原理剖析
java·linux·c语言·jvm·c++
潘潘的嵌入式日记17 小时前
位操作怎么写才不出错?置位、清位、翻转、取位一次讲清
c语言·嵌入式·寄存器·位操作
无忧.芙桃18 小时前
数据结构之排序算法(上):从评价指标到插入、希尔、选择与堆排序
c语言·c++·排序算法
SuperByteMaster18 小时前
configUSE_TIME_SLICING和configUSE_PREEMPTION
c语言
周杰偷奶茶18 小时前
【C 语言】分支、循环和 goto 语句(附实战)
c语言