如何在NASM中返回浮点值

How do I return floating point values in NASM?

本文关键字:返回 NASM      更新时间:2023-10-16

我试图在NASM中返回一个浮点值。它总是显示"-nan"。

使用:

  • NASM version 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