簡體   English   中英

fpu以基於堆棧的方式實現寄存器的動機是什么?

[英]What's the motivation for a fpu to implement their registers in stack-based fashion?

fpu以基於堆棧的方式實現寄存器的動機是什么? 據我所知,其他指令集如x86 / sse使用命名寄存器。 我可以想象基於堆棧的屬性通常與我們的函數思想相對應,從而為匯編程序員提供了更直觀的設計。

然而,我很好奇是否有一些更有形的動機,即技術優勢。

這些架構現在不再在現場看到。 盡管如此,寄存器和程序代碼空間的硅空間都是稀有資源(現在在嵌入式環境中仍然如此)。 這幾乎總結了這種架構背后的兩個動機:

  • ISA更加苗條
    • 需要更少的寄存器編碼空間
    • 堆棧處理等事情的指示較少(顯然)
  • 更簡單的硬件設計
    • 寄存器解碼邏輯少
    • 非常確定的和數學上易於理解的行為(像Java虛擬機這樣的虛擬架構仍然使用它的原因)

這個問題只能由最初的8087本人W Kahan的設計師真實地回答,他在一篇名為“關於8087疊加的優勢”的簡短論文中寫到了這個問題。

從那里:

  • 8087堆棧實際上不是“經典堆棧”,您可以訪問任何寄存器,而不僅僅是前兩個/三個寄存器。
  • 具有兩個操作數/指令的平面寄存器設置是不切實際的:協處理器指令缺少編碼空間,這使得單操作數指令成為首選(並且堆棧優於此),以及它可能具有的寄存器數量(顯然8是不可能的,似乎只有4個寄存器有足夠的空間)被認為不足以有效計算一些常見的浮點運算。
  • 堆棧溢出/下溢應該不經常發生,並且在軟件中處理,給出了更大堆棧的錯覺。

這主要僅適用於x86,因為ARM和PowerPC以及MIPS和Sparc都不會將其FPU實現為基於堆棧的計算機。

現在我們已將其縮小到x86,原因很明顯。 像計算中的許多其他東西一樣歸結為歷史原因(有些人稱之為歇斯底里的葡萄干,因為真正的原因並沒有真正意義)。

歷史原因是x86架構沒有FPU。 現在,我知道你會說“但看看Pentiums!”。 是的,他們有FPU,但IBM選擇構建他們的PC的原始8086沒有FPU - 這是一個像許多低端微控制器這樣的嚴格整數機器。

這不是一個太大的問題,因為它主要是低端終端和文本處理器。 但它的廉價和普及突然看到它被用於科學和工程應用。 所以人們想出了帶有FPU芯片的附加擴展卡,以加快速度。 最受歡迎的這些卡恰好使用基於堆棧的芯片,該芯片也是由英特爾制造的。 這一小事實使英特爾更容易將芯片集成到未來的CPU中。

此時,英特爾仍然可以設計一個不基於附加芯片的指令集。 但發生了兩件事。 許多應用程序(主要是游戲和電子表格)開始使用附加FPU,這些應用程序變得非常非常受歡迎。 此外,其他芯片供應商也看到了PC市場正在發生的事情,並希望采取行動。 因此,由於向后兼容並且需要快速添加此功能,英特爾做了最明智的事情(在業務管理方面,不一定在工程方面):他們只是將協處理器芯片包含在他們的下一個版本的x86中,以便營銷部門可以說他們有一個FPU。

長話短說:歇斯底里的葡萄干!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM