我准备在维基百科上发表一篇关于尾递归的文章:http://en.wikipedia.org/wiki/Tail_call
现在在文章的最后,该示例显示了堆栈指针用于访问传递给程序集伪代码中函数调用的参数。这不是错吗?我的意思是被调用者通过使用正确的帧指针而不是堆栈指针来访问参数?
最佳答案
使用堆栈指针很好。毕竟它总是指向堆栈。如果函数中有任何 push 或 pop 指令,那么跟踪从堆栈指针到函数参数的偏移量就有点困难。当没有帧指针时,很难在调试器中返回堆栈。
使用帧指针可以使调试器和编译器编写者的工作更轻松,但并不是必须要有。
设置帧指针需要一条指令,它会占用一个可能用于其他用途的寄存器。所以改用堆栈指针是优化代码的常用技术。 Microsoft 编译器甚至为此优化起了一个名字,他们称之为 Frame Pointer Omission
关于assembly - 查询汇编语言中堆栈指针的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360440/