4

我准备在维基百科上发表一篇关于尾递归的文章:http ://en.wikipedia.org/wiki/Tail_call

现在在本文的末尾,示例显示堆栈指针用于访问在汇编伪代码中传递给函数调用的参数。这不是错的吗?我的意思是被调用者通过使用帧指针而不是堆栈指针来访问参数?

4

2 回答 2

4

使用堆栈指针很好。毕竟它总是指向堆栈。如果函数中有任何 push 或 pop 指令,跟踪从堆栈指针到函数参数的偏移量有点困难。当没有帧指针时,很难在调试器中将堆栈返回。

使用帧指针使调试器和编译器编写器的工作更容易,但没有必要拥有一个。

设置帧指针需要一条指令,它会占用一个可能用于其他用途的寄存器。因此,使用堆栈指针代替是优化代码的常用技术。微软编译器甚至为这种优化起了一个名字,他们称之为帧指针省略

于 2010-03-02T02:17:15.903 回答
3

专用的帧指针寄存器绝对是常见ABI中更流行的调用约定,但是当纯粹出于说明目的使用不同的(可能更简单的)调用约定时并没有本质上“错误”(将帧指针寄存器添加到这些片段会只是让它们更长一点,并没有改变任何实质性的东西)。

于 2010-03-02T02:08:34.120 回答