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