Как вернуть значения с плавающей запятой в NASM?

Я пытаюсь вернуть значение с плавающей запятой в NASM. Всегда отображается «-nan».

С помощью:

  • NASM версия 2.10.09 составлена ​​29 декабря 2013 г.
  • г ++ 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, пожалуйста, свяжите их.

0

Решение

использование 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
1

Другие решения


По вопросам рекламы [email protected]