assembly - 查询汇编语言中堆栈指针的使用

标签 assembly stack wikipedia

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

现在在文章的最后,该示例显示了堆栈指针用于访问传递给程序集伪代码中函数调用的参数。这不是错吗?我的意思是被调用者通过使用正确的帧指针而不是堆栈指针来访问参数?

最佳答案

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

使用帧指针可以使调试器和编译器编写者的工作更轻松,但并不是必须要有。

设置帧指针需要一条指令,它会占用一个可能用于其他用途的寄存器。所以改用堆栈指针是优化代码的常用技术。 Microsoft 编译器甚至为此优化起了一个名字,他们称之为 Frame Pointer Omission

关于assembly - 查询汇编语言中堆栈指针的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360440/

相关文章:

arrays - 在 Julia 的列中组合和堆叠数组

python - Wikipedia api python 返回奇怪的结果

delphi - 从汇编例程访问 Delphi 记录、类等之后的第一个字节

x86 - 用于 x86 (MASM) 汇编的免费 IDE + 汇编器 + 软件模拟器?

c++ - 我怎样才能通过引用弹出一些东西?

java - 比较java中的结构化数据

api - 当页面标题与文件名不同时,如何查询 wikipedia api 中的文件?

mediawiki - 按类别选项导出维基百科?

assembly - 使用Intel SIMD SSE加载非连续值

assembly - AMD ryzen 7 2700指令集是什么(用于创建汇编程序)