【发布时间】:2014-10-13 01:44:24
【问题描述】:
我试图在 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,请链接它们。
【问题讨论】:
-
您是否检查过您的平台对
extern "C"的调用约定? -
这里有一个简单的方法:编写一个返回
double的C函数,将其编译为汇编,并在您自己的汇编函数中,模仿汇编代码的最后一条指令,这无疑会尊重您平台的 ABI。 -
x86-64 使用 xmm 寄存器进行浮点数。请参阅 ABI 文档,而不是尝试对编译器生成的代码进行逆向工程;)
标签: c++ assembly floating-point nasm x86-64