【问题标题】:FDIV how to use it in nasm, assemblyFDIV 如何在 nasm、汇编中使用它
【发布时间】:2011-03-19 00:05:47
【问题描述】:

我有一个总和值存储在

fstp    qword [ebx]  ; Copy contents of st0 to space currently on top of the system stack

如何除以存储在寄存器 edi 中的整数值?

我以为只是

fdiv edi

但它说......blah blah blha的组合无效

洞察力?

【问题讨论】:

    标签: assembly nasm


    【解决方案1】:

    你不能。 FPU 无​​权访问整数寄存器。

    【讨论】:

    • 我在想这可能会起作用 fstp qword [ebx] ;将 st0 的内容复制到当前位于系统堆栈顶部的空间 fld qword [edi] ;将 edi 移动到 FPU fdiv ;划分? fstp qword [ebx] ;复制结果打印出来
    • 为什么不直接推送 edi、fdiv [esp]?
    【解决方案2】:

    正如 Jens 在他的回答中所说,FPU 无​​法直接访问整数寄存器。您将需要使用暂存存储器进行传输。这是 x87 FPU 的主要缺点之一。示例代码可能类似于:

    section .bss
    fpscratch: resd 1
    

    ...

    section .text
    
    ;other code goes here
    
    MOV fpscratch, edi
    FILD fpscratch
    FDIV
    

    (请注意上面的代码:显然,它没有经过测试,而且我的程序集有点生疏,所以它可能有问题,尽管它很好而且很短。)

    【讨论】:

    • 我试过了,但它不起作用,但是我现在正在使用这段代码,它正在输出 -nan
    • fild qword [ebp+12] fstp qword [ebx] ;将st0的内容复制到当前系统栈顶空间 ;mov fpscratch, edi ;fild edi fdiv fstp qword [ebx] ;复制st0 的内容到当前系统堆栈顶部的空间
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2015-04-26
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多