x86での浮動小数点演算の基本を理解しようとしています。スタックを備えた専用のFPUがあることは理解していますが、さまざまな命令に関してスタックがどのように動作するかについて、関連する情報があまり見つかりません。
基本的に、fpuレジスタのアドレス指定は私を混乱させます。st(#)を参照する場合、特定のレジスタについて話しているのですか?それとも、スタックの一番上からのオフセットですか?
私の質問のほとんどは、この1つの例で答えられると思います。
空のFPUスタックがあり、実行する場合:
fld x
fld y
fmul st, st(1)
結果は次のようになります:
ST(0) = y * x
ST(1) = x
また:
ST(0) = x * y
ST(1) = y
?
これらの違いはST(1)の値であることに注意してください。