Я пытаюсь вернуть значение с плавающей запятой в 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