Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么';它相当于ARM处理器上的BP寄存器(帧指针)?_Assembly_Arm_Calling Convention - Fatal编程技术网

Assembly 什么';它相当于ARM处理器上的BP寄存器(帧指针)?

Assembly 什么';它相当于ARM处理器上的BP寄存器(帧指针)?,assembly,arm,calling-convention,Assembly,Arm,Calling Convention,在英特尔平台上,BP用于指向堆栈帧的开头,并访问参数[BP+0x]和局部变量[BP-0x] ARM中使用哪个寄存器?或者,寻址是否仅基于SP [我没有自己编译和反汇编的基础设施。参考AAPCS对我也没有帮助]你要找的是帧指针。通常,R7在THUMB模式下充当帧指针,R11在ARM模式下充当帧指针。但是,如果操作系统愿意的话,它有权自行决定改变这一惯例 阅读注意这是ABI问题,而不是处理器问题。(处理器不在乎你使用什么寄存器。)不同的操作系统可以做不同的事情。谢谢@RaymondChen。我更新了

在英特尔平台上,
BP
用于指向堆栈帧的开头,并访问参数
[BP+0x]
和局部变量
[BP-0x]

ARM中使用哪个寄存器?或者,寻址是否仅基于SP


[我没有自己编译和反汇编的基础设施。参考AAPCS对我也没有帮助]

你要找的是帧指针。通常,
R7
在THUMB模式下充当帧指针,
R11
在ARM模式下充当帧指针。但是,如果操作系统愿意的话,它有权自行决定改变这一惯例


阅读

注意这是ABI问题,而不是处理器问题。(处理器不在乎你使用什么寄存器。)不同的操作系统可以做不同的事情。谢谢@RaymondChen。我更新了我的答案以反映你(正确)的观点。。。如果您有一个堆栈指针寄存器,那么现代编译器并不真正需要帧指针(FP);他们知道堆栈的布局,因此可以从SP索引以获取可能需要从FP访问的任何内容。所以FP实际上是可选的,这取决于你的编译器。我不知道为什么操作系统会和这个约定有任何关系。它可能在内部使用特定的约定,但应用程序不应该在意;他们只需要知道调用操作系统原语的约定,并且只需要在此类调用中使用该约定。否则,他们应该可以自由地进行调用/帧管理约定。一些ABI指定特定的帧指针寄存器(因此操作系统可以进行堆栈遍历)。AAPC(2003)没有类似的功能;较旧的APCS在ARM模式下将R11作为
FP
。由于ARM有更多寄存器,通常不需要通过堆栈/帧索引局部变量。