0

質問があります。浮動小数点ユニットのスタックが次のようになっているとしましょう。

ST0 = +1.5000000000000000e+0001   ST1 = +5.0000000000000000e+0000
ST2 = +2.5000000000000000e+0001   ST3 = +0.0000000000000000e+0000  
ST4 = +0.0000000000000000e+0000   ST5 = +0.0000000000000000e+0000   
ST6 = +0.0000000000000000e+0000   ST7 = +0.0000000000000000e+0000 

この指示を実行した後:

fstp st(1) 

私の予測では、ユニットは st(0) を st(1) に送信し (スタックの状況は になります1.5;1.5;2.5;0 etc)、スタックの一番上をポップするので、状況は次のようになります。1.5;2.5;0 etc.

代わりに、次のように表示されます。

ST0 = +1.5000000000000000e+0001   ST1 = +2.5000000000000000e+0001   
ST2 = +0.0000000000000000e+0000   ST3 = +0.0000000000000000e+0000   
ST4 = +0.0000000000000000e+0000   ST5 = +0.0000000000000000e+0000   
ST6 = +0.0000000000000000e+0000   ST7 = +1.5000000000000000e+0001

私の質問は、なぜst(7)変化したのか、どうすれば期待した結果を達成できるのかということです。助けてくれてありがとう!

4

2 に答える 2

0

さて、私は今答えを得ました。最後のレジスタにゼロ以外の値が表示される問題は、FPU スタックの構築の結果です。st(7) に示されている値は、トップ項目をポップするコンパイラの方法の結果であり、ゴミです。したがって、スタックをポップするには、スタックを回転させるだけです。

補足: 他のコンパイラはそのように動作する必要はないかもしれませんが、すべてのコードがそのように実行されることを期待すべきではありません。コンパイラの問題です。

于 2014-01-16T13:00:20.067 に答える