I'm struggling with some x86-64 assembly, and floating point numbers are giving me a headache. For instance, when I run this code :
section .data
omega: dq 2.0
omega2: dq 3.0
section .text
global func
func: push rbp
mov rgp, rsp
FINIT
FLD qword [omega]
FLD qword [omega2]
FADD st0, st0
mov rsp, rbp
pop rbp
ret
This function is called from a C code like that : printf("%Lf \n", func() );
Unfortunately the result is some bizarre number... I tried adding two integers using FIADD
, and it worked fine. I dug through a ton of material already, but maybe someone here can point me to decent FPU tutorial, or share her/his experience and wisdom :)
Wrapping up the essentials:
- language: x86-64 assembler
- assembler: nasm v. 2.09.04 installed from repositories
- compiler (for C): gcc v. 4.5.2 (installed with Ubuntu)
- OS: Ubuntu 11.04 64bit on Oracle VM
- Host OS: Windows 7 SP1 64bit
- Processor: Intel i5 - 2430M 64bit (checked twice :D )
- Problem: FPU can't add two numbers :(
Just in case : in the end i hope to use FSINCOS
and other fancy FPU instructions, but seeing as even simple addition fails...
Thanks all in advance!