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 组合来传递。

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

相关推荐
今夜有雨.1 小时前
图像运算、掩膜/ROI 与绘制交互
c语言·数据结构·c++·qt·算法·计算机视觉
知识分享小能手1 小时前
C学习教程,从入门到精通,C语言概述 —— 知识点详解(1)
c语言·开发语言·学习
东木月1 小时前
Windows C 盘清理指南:安全删除临时文件、缓存与 Prefetch
c语言·windows·安全
水饺编程2 小时前
第1章,[Win32 章节]:Windows 的方方面面
c语言·c++·windows·visual studio
我就是不信2 小时前
用 C 语言实现一个支持 HTML 与视频的 HTTP(S) 服务器
c语言·html·音视频
Helix2502 小时前
2026编程入门指南:零基础如何科学选择第一门编程语言?
java·c语言·javascript·零基础·编程语言·python入门·编程就业
Escalating_xu3 小时前
【C 语言】字符函数和字符串函数:从 ctype 到 strtok、strerror 全面解析
java·c语言·开发语言
yyy(十一月限定版)13 小时前
224redfg
c语言
小师兄吃牛肉15 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
lhbweilai16 小时前
深挖FreeRTOS内核实现(三)
c语言·stm32·单片机