0

我在使用 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 计算)。

4

1 回答 1

2

您必须提供从整数表示转换为双精度表示的说明

 fild local_var_120  ; where the variable is stored as integer

或者您可以简单地使用您的汇编程序为您完成:

 LOCAL log_e_120: REAL8 120.0
于 2012-12-22T10:19:55.057 回答