如何在NASM中返回浮点值?

时间:2014-08-19 20:14:35

标签: c++ assembly floating-point nasm x86-64

我正在尝试在 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,请链接它们。

1 个答案:

答案 0 :(得分:1)

使用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

make&amp;运行

nasm -felf64 callee.asm
g++ Wl,callee.o caller.cpp
./a.out