我正在尝试在 NASM 中返回浮点值。它始终显示“-nan”。
使用:
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/