为什么80x87指令集使用“基于堆栈”的设计?

时间:2014-10-18 20:28:50

标签: assembly instruction-set x87

当英特尔首次设计8087时,他们为什么选择将浮点寄存器组织成堆栈?从这样的设计中可以获得什么样的优势?与允许任意寄存器用作源和目标操作数相比,它似乎更不灵活,更难处理。

1 个答案:

答案 0 :(得分:2)

@Jester评论中分享的文章"On the Advantages of the 8087's Stack"解释了设计师的想法。他们将浮点寄存器组织为堆栈的原因摘要:

  1. 潜在地,它可以使过程调用更有效,因为(理论上)调用者和被调用者都不必显式保存和恢复FP寄存器。需要进行FP计算的被调用者只需将其操作数推入寄存器堆栈,进行计算,并在完成后将结果从堆栈中弹出,自动恢复调用者的x87状态。 (这与机器堆栈如何用于函数参数,返回值和局部变量基本相同。)

  2. 考虑到指令已经在8086/8088上编码的方式,以及已经使用的操作码数,它们只能为8087提供1操作数指令,而不是2操作数。对于平面寄存器文件,这不会很好。

  3. 他们认为提供FXCH指令会使其足够简单,可以随意重新排列x87寄存器堆栈(因此任意值对可以在需要时用作操作数)。此外,FXCH操作很便宜。