A
Das mir printf immer -0,00000 ausgibt ist erstmal nicht so wichtig.
Das ist sehr wichtig, denn die printf-Funktion kann meines Wissens keine floats ausgeben, nur doubles - und das hat Auswirkung wie man die Parameter auf dem Stack ablegt. Die 8 Bytes eines doubles muss man unter Beachtung der "Endianesses" auf dem Stack ablegen, ungefähr so:
tmp: .double 0.0
...
ftspl tmp
movl (tmp + 4), %eax
pushl %eax
movl tmp, %eax
pushl %eax
Damit wäre eine double-Variable tmp auf dem Stack, etwas unschön gemacht, schöner wäre z.B. so:
fstpl (%esp)
Das war's.
Was in deinem Code-Ausschnitt noch fehlt, ist die Bereinigung vom Stack, machst lauter push, aber kein einziges pop, in dem kurzen Code ist das vielleicht nicht so kritisch, später aber, wenn es umfangreich wird und du dich wunderst, warum bekomme ich ständig Stack-Overflows...
Ansonsten hast du coole Sache gemacht, 1.0 + 2.0 auf Pentium 4 berechnet, warum auch nicht, weiter so