ARM 寄存器约定在哪里?

Where's the ARM register convention?

根据ARMv7文档,R0-R12为通用寄存器,R13、R14、R15为SP、LR、PC。我在 ARM 论坛、Whosebug 或其他站点的一些问题中看到 R11 经常用作帧指针(ARM forum, pp, Whosebug, Microsoft), however I can't find any official documentation, from ARM or GCC, declaring the use of this register. Some people also said it was in the AAPCS,但是,本文档中关于 R11 的唯一可用信息是它是一个变量寄存器。

如果有人能帮忙找到一份说明这些寄存器用法的官方文档,包括R11作为帧指针,我将不胜感激。

我认为您正在寻找 ABI,应用程序二进制接口。

这是文档集。在 base level 处,R11 确实声明为 "Variable-register 8."。

这本身并不是一个非常严格的定义。实现基本上可以分配任何变量,无论是程序员可见的变量还是一些内部帮助变量,用于他们需要的任何特定于语言的功能。帧指针变量在某些语言中是有用的变量,但不是全部,在不需要帧指针的实现中牺牲第 8 个变量寄存器将是一种耻辱。

所以ARM没有正式声明如何将R11用作帧指针,GCC也不能代表ARM发表官方声明。