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:
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!
Ok, so in the end it turned out that my problems were related to the fact, that FPU registers are organized as a stack, and i didn't pay enough attention to it which resulted in garbage and unwanted leftovers. Switching from "standard" to "pop" versions of instructions helped!
Anyway - thanks to all who bothered to read, it is much appreciated! :)
If anyone is interested - I was doing a class assignment where I had to compute motion of one planet from the view of another (geocentric model) in assembly. The final result translated to processing can be viewed here.