我在使用 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 类型,底部第二个为调试 QWORD 类型的结果。
我也把log_e_120的类型改成了REAL8,QWORD,效果差不多。
另外:我无法正确调试代码的值。
当然,结果应该是大约 4.7874917427820458(wolframapha 计算)。