ARM寄存器约定在哪里?

时间:2018-07-03 11:02:21

标签: arm cpu-registers armv7

根据ARMv7文档,R0-R12是通用寄存器,R13,R14和R15是SP,LR和PC。我在ARM论坛,StackOverflow或其他站点的一些问题中看到R11通常用作帧指针(ARM forumppStackOverflowMicrosoft),但是我找不到任何声明使用此寄存器的ARM或GCC官方文档。有人还说它在AAPCS中,但是,本文档中唯一有关R11的信息是它是一个变量寄存器。

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

1 个答案:

答案 0 :(得分:0)

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

这是文档的集合。在base level,R11实际上被声明为“变量寄存器8”。

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

因此,ARM没有正式声明如何将R11用作帧指针,而GCC也不能代表ARM做出正式声明。