Arm 其中';武器登记公约是什么?

Arm 其中';武器登记公约是什么?,arm,cpu-registers,armv7,Arm,Cpu Registers,Armv7,根据ARMv7文档,R0-R12是通用寄存器,R13、R14和R15是SP、LR和PC。我在ARM论坛、StackOverflow或其他网站的一些问题中看到R11经常用作帧指针(,),但我找不到ARM或GCC的任何官方文档,声明使用此寄存器。有些人还说,它是在,然而,在这篇文档中,关于R11的唯一可用信息是,它是一个变量寄存器 如果有人能帮我找到一份说明这些寄存器使用情况的官方文件,包括R11作为帧指针,我将不胜感激。我想您正在寻找应用程序二进制接口 这是一组文件。实际上,R11被声明为“变量寄

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


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

我想您正在寻找应用程序二进制接口

这是一组文件。实际上,R11被声明为“变量寄存器8”

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


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

调用约定根据定义是用户/编译器作者等的选择。在这种情况下,ARM与MIPS和其他供应商一样,都有建议,许多编译器(如果不是所有的话)都选择遵循这一点。但他们没有理由非得这么做,因为他们可以自由地做自己的事情。