汇编ARM中堆栈指针和帧指针有什么区别

我想知道是否有人可以向我解释汇编 ARM 中堆栈指针和帧指针之间的区别

回答

按照我的理解,SP 总是指向下一个可用的堆栈地址(可能需要先预递减或预递增),它将用于推送数据或存储返回地址。

SP 可以在被调用函数执行时更改,例如,如果函数在堆栈上动态分配存储块。因此,堆栈帧中的数据(例如传递的参数和局部变量)不能通过来自 SP 的偏移量可靠地引用,因为不能保证在整个函数执行过程中 SP 具有相同的值。

FP,OTOH,保证在函数的整个执行过程中具有相同的值,因此所有本地数据都可以通过来自 FP 的硬编码偏移量来访问。FP 设置为堆栈帧内的固定值,通常刚好经过最后传递的参数。

这是我发现可能有用的图像。您可以看到 FP 的偏移量始终是正确的,但 SP 的偏移量将取决于动态区域的大小,因此不能硬编码,在其堆栈帧中分配运行时可变空间量的函数中(如 C99 VLA / alloca)。
https://www.cs.purdue.edu/homes/hosking/502/spim/node23.html。这样做的函数可以优化掉帧指针(优化编译器会在从更高级别的源语言(如 C)制作 asm 时为您做这件事)。


以上是汇编ARM中堆栈指针和帧指针有什么区别的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>