fpu がスタックベースの方法でレジスタを実装する動機は何ですか? 私の理解では、x86/sse などの他の命令セットは名前付きレジスタを使用しています。スタックベースのプロパティは、一般的な関数の考え方に対応しているため、アセンブリ プログラマにとってより直感的な設計になっていると想像できます。
しかし、もっと具体的な動機、つまり技術的な利点があるかどうかに興味がありました。
これらのアーキテクチャは、今日、フィールドでは一般的に見られなくなりました。しかし、当時は、レジスタ用のシリコン空間とプログラム コード空間の両方が希少なリソースでした (現在の組み込み環境では依然としてそうです)。これは、このようなアーキテクチャの背後にある 2 つの動機をほぼ要約しています。
この質問に真に答えることができるのは、元の8087の設計者であるW. Kahanだけです。彼は、「8087のスタックの利点について」という短い論文にこの質問について書いています。
そこから:
ARM も PowerPC も MIPS も Sparc も FPU をスタックベースのマシンとして実装していないため、これは主に x86 にのみ当てはまります。
x86 に絞り込んだので、その理由は明らかです。コンピューティングの他の多くのことと同様に、それは歴史的な理由に要約されます (本当の理由は実際には意味をなさないため、ヒステリックなレーズンと呼ぶ人もいます)。
歴史的な理由は、x86 アーキテクチャに FPU がなかったことです。さて、「でも Pentium を見てください!」と言うでしょう。はい、彼らには FPU がありましたが、IBM が PC を構築するために選択したオリジナルの 8086 には FPU がありませんでした。最近の多くのローエンド マイクロコントローラーのように、厳密に整数のマシンでした。
これは主にローエンドの端末とテキスト プロセッサを対象としていたため、それほど大きな問題ではありませんでした。しかし、その安さと人気により、科学および工学のアプリケーションで突然使用されるようになりました。そこで人々は、高速化のために FPU チップを搭載したアドオン拡張カードを考え出しました。これらのカードの中で最も人気のあるものは、同じく Intel によって製造されたスタック ベースのチップを使用しています。この小さな事実により、Intel は後でこのチップを次世代の CPU に統合することが容易になりました。
この時点で、Intel は、アドオン チップに基づいていない命令セットを設計できた可能性があります。しかし、2つのことが起こりました。多くのアプリ、主にゲームやスプレッドシートがアドオン FPU の使用を開始し、これらのアプリは非常に人気が高くなりました。また、他のチップ ベンダーも、PC 市場で何が起こっているかを見て、行動に参加したいと考えていました。したがって、後方互換性によって強制され、この機能を迅速に追加する必要があるため、インテルは最も賢明なことを行いました (必ずしもエンジニアリングの観点からではなく、ビジネス管理の観点から)。マーケティング部門は、FPU を持っていると言うことができます。
簡単に言えば、ヒステリックなレーズンです!