使用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 watch中本地log_e_120的值。看起来像:
我所有的FLD操作都已正确组装:
fld qword ptr [log_e_120]
屏幕的上半部分是REAL8类型,底部的第二个是调试QWORD类型的结果。
我还将log_e_120的类型更改为REAL8,QWORD,效果非常相似。
另外:我无法正确调试代码的值。
当然,结果应该是4.7874917427820458(wolframapha computation) 。
答案 0 :(得分:2)
您必须提供从整数表示转换为double
的说明 fild local_var_120 ; where the variable is stored as integer
或者您只需使用汇编程序为您完成:
LOCAL log_e_120: REAL8 120.0