ARM汇编编程(AArch64架构)课程 - 第5章函数调用规范

目录

AAPCS64调用约定

ARM Architecture Procedure Call Standard for 64-bit (AAPCS64)

参数传递规则

参数位置 寄存器分配 特殊规则
参数1-8 X0-X7 (64-bit) / W0-W7 (32-bit) 浮点数使用 V0-V7
参数>8 栈传递(按顺序右→左压栈) 要求8字节对齐
可变参数 所有浮点参数必须通过寄存器传递 需预留相应寄存器空间

示例代码:

assembly 复制代码
// 函数调用示例
mov x0, #1       // 第一个整型参数
mov x1, #2       // 第二个整型参数
fmov d0, 3.14    // 第一个浮点参数
bl my_function

返回值规则

  • 整型返回值:X0(64-bit)/W0(32-bit)
  • 浮点返回值:V0(128-bit)/D0(64-bit)/S0(32-bit)
  • 大结构体:通过X8间接返回(调用者分配内存)

栈帧管理

SP寄存器

  • Stack Pointer:始终指向栈顶
  • 操作要求
    • 必须保持16字节对齐
    • 函数退出时必须恢复原始值

FP寄存器 (X29)

  • Frame Pointer:指向当前栈帧基址

  • 典型布局

    复制代码
    High Address
    +---------------+
    |  Caller's FP  | ← FP
    +---------------+
    |   LR (X30)    |
    +---------------+
    |  Local Vars   |
    +---------------+
    |  Callee-save  |
    +---------------+
    | 参数区域(>8)   | ← SP
    Low Address

栈帧布局示例

assembly 复制代码
my_function:
    // 序言
    stp x29, x30, [sp, #-32]!  // 保存FP/LR并分配栈空间
    mov x29, sp                 // 建立新栈帧

    // 函数体
    str x0, [x29, #16]          // 保存参数到栈

    // 尾声
    ldp x29, x30, [sp], #32     // 恢复FP/LR并释放栈空间
    ret
相关推荐
科技小花28 分钟前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
2501_9481142430 分钟前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
FserSuN1 小时前
LangChain DeepAgent 多 Agent 架构原理学习
架构·langchain
坏孩子的诺亚方舟1 小时前
RTL设计师攻略0_架构与微架构
架构·cpu·面试攻略
智星云算力1 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
C++ 老炮儿的技术栈2 小时前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
熊猫钓鱼>_>3 小时前
从“流程固化“到“意图驱动“:大模型调智能体调Skill架构深度解析
ai·架构·大模型·llm·agent·skill·openclaw
Agent产品评测局4 小时前
互联网行业自动化平台选型,运营全流程提效指南:2026企业级智能体架构与实战全解析
运维·人工智能·ai·chatgpt·架构·自动化
AI成长日志5 小时前
【AI原生开发实战】1.2 传统开发 vs AI原生开发:思维转变与架构差异
服务器·架构·ai-native
戮戮5 小时前
Spring Cloud Gateway 零拷贝参数校验:一种高性能网关架构实践
java·网络·架构·gateway