FPU を使用した単純な対数計算に問題があります。Visual Studio 2012 に統合された MASM コンパイラを使用しています。
LOCAL log_e_120 : REAL8;
MOV eax, 120
MOVD mm0, eax
MOVQ log_e_120, mm0
FINIT
FLDLN2 ; load log_e(2)
FLD log_e_120 ; load x
FYL2X ; compute log_e(2)*log_2(x) = log_e(x)
FSTP log_e_120 ; store the result
nop
レジスタ/ローカルなどの状態を表示するために、NOP 操作にブレークポイントを設定しました。
プロセスが NOP のとき、VS2010 ウォッチでローカル log_e_120 の値をデバッグしています。次のようになります。
FLD の操作はすべて、次のように適切に組み立てられています。
fld qword ptr [log_e_120]
画面上部が REAL8 型、下から 2 番目が QWORD 型のデバッグ結果です。
また、log_e_120 のタイプを REAL8、QWORD に変更しましたが、まったく同じ効果です。
また、コードの値を適切にデバッグできません。
もちろん、結果は約 4.7874917427820458 ( wolframpha 計算) になるはずです。