我正在尝试在 NASM 中返回浮点值。它始终显示“-nan”。

使用:

  • NASM 版本2.10.09(2013年12月29日编译)
  • g++ 4.8

  • main.cpp :
    #include <iostream>
    extern "C" double _main();
    
    int main()
    {
        std::cout << _main() << std::endl;
    
        return 0;
    }
    

    _main.asm :
    global _main
    
    segment .data
    val: dq 123.321
    
    segment .text
    _main:
    
        PUSH rbp
        MOV rbp, rsp
    
        FINIT
        FLD qword [val]
    
        MOV rsp, rbp
        POP rbp
    
    RET
    

    例如,如果有人拥有一些教程和/或说明,请在线使用NASM,请链接它们。

    最佳答案

    使用 movsd 将标量double加载到XMM寄存器中。

    对于文件:

    caller.cpp:

    #include <iostream>
    using namespace std;
    extern "C" double asmfunc();
    
    double val = 123.321;
    
    double dubidoo ()
    {
        return val;
    }
    
    int main ()
    {
        cout << "dubidoo: " << dubidoo() << endl;
        cout << "asmfunc: " << asmfunc() << endl;
    
        return 0;
    }
    

    callee.asm:
    segment .data
        val: dq 123.321
    
    section .text
    global asmfunc
    
    asmfunc:
        movsd    xmm0, [val]
        ret
    

    制作并运行:
    nasm -felf64 callee.asm
    g++ Wl,callee.o caller.cpp
    ./a.out
    

    关于c++ - 如何在NASM中返回浮点值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25392207/

    10-12 21:17