【发布时间】:2012-02-14 06:22:50
【问题描述】:
fpu 以基于堆栈的方式实现其寄存器的动机是什么?据我了解,其他指令集(例如 x86/sse)使用命名寄存器。我可以想象,基于堆栈的属性通常与我们对函数的想法相对应,从而为汇编程序员带来更直观的设计。
但是我很好奇是否有一些更切实的动机,即技术优势。
【问题讨论】:
-
我的猜测是它更容易在硬件中实现。如果所有指令都在顶部寄存器中运行,则不需要寄存器文件。
-
除了成本/复杂性之外,算术表达式可以表示为树并使用堆栈进行评估。
-
标准 x86 FPU 使用堆栈(通过
ST(x)引用),它唯一的 SSE/AVX/FMA/MMX/3DNow!已命名的寄存器 -
实际原因是逆波兰表示法可以写成x87 FPU汇编代码。 30 年前,x87 FPU 的堆栈设计简化了汇编编程。现在直接将 RPN 转换为 FPU 指令并不是最优的,因为 FPU 的延迟比反向吞吐量要长得多。看看 Peter Kankowski 的这篇文章:strchr.com/reverse_polish_notation