【问题标题】:Compute logarithm ln(x) using FPU assembly使用 FPU 组件计算对数 ln(x)
【发布时间】:2025-12-30 06:50:16
【问题描述】:

我在使用 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 computation) .

【问题讨论】:

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


    【解决方案1】:

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

     fild local_var_120  ; where the variable is stored as integer
    

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

     LOCAL log_e_120: REAL8 120.0
    

    【讨论】: