使用FPU汇编计算对数ln(x)

时间:2012-12-22 10:03:36

标签: visual-studio-2010 assembly masm masm32 fpu

使用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的值。看起来像: Results of debugging

我所有的FLD操作都已正确组装:

fld         qword ptr [log_e_120]

屏幕的上半部分是REAL8类型,底部的第二个是调试QWORD类型的结果。

我还将log_e_120的类型更改为REAL8,QWORD,效果非常相似。

另外:我无法正确调试代码的值。

当然,结果应该是4.7874917427820458(wolframapha computation) 。

1 个答案:

答案 0 :(得分:2)

您必须提供从整数表示转换为double

的说明
 fild local_var_120  ; where the variable is stored as integer

或者您只需使用汇编程序为您完成:

 LOCAL log_e_120: REAL8 120.0
相关问题