2011-07-20 12 views
3

私はx86上の浮動小数点演算の基本的な理解を得ようとしています。私はスタックを持つ専用のFPUを持っていることを理解していますが、異なる命令の観点からスタックがどのように動作するかに関する関連性の高い情報は見つかりません。基本的な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)の値です。

答えて

5

これは上からオフセットされています。荷重は既存のアイテムをスタックにさらに押し込み、ポップはそれらを上部に近づけるようにします。ここにあなたの小さなプログラムを実行どのように見えるかです:

    ST(0)  ST(1) 
<start>   ---   --- 
fld x    x   --- 
fld y    y   x 
fmul st(0), st(1) y*x   x 

This referenceはかなりよくそれをすべて説明しています。

+0

ありがとう!参考文献も非常に有用でした。 – ProdigySim

1

intelデベロッパーマニュアルは、特定のfpu命令がどのように機能するのか(そしてfpu自身がどのように動作するのか)を見つけるのに最適な場所です。あなたの例では、xを最初にロードし、st(0)に置きます.yをロードするとst(0)はst(1)にプッシュダウンされ、yはst(0)に格納されます。あなたがfmulすると、st(0)はy * xになり、st(1)はxのままになります。基本的にFILOスタック(ラップアラウンドおよびその他の特殊機能を含む)

+0

インテルの開発者マニュアルはオンラインで入手できますか? – ProdigySim

+0

@ProdigySim:ここでそれらを見つけるでしょう:http://www.intel.com/products/processor/manuals/ – Necrolis

関連する問題