Ich habe folgenden Code, der den Rest einer Float Division berechnen soll:
fld dword [esp] ;operand 1 vom stack in st0 holen
fld dword [esp + 4] ;operand 2 vom stack in st1 holen
.calc
fprem ;einen teil der berechnung vornehmen
fstsw ax ;statusword nach ax
test ax, 10000000000b ;gucken ob die berechnung fertig ist (bit 10 nicht gesetzt)
jnz .calc ;wenn nicht, dann weiterrechnen
add esp, 4 ;einen operand vom stack popen
fstp dword [esp] ;ergebniss in den stack schreiben
Er funktioniert auch wunderbar, nur wenn ich ihn öfters aufrufe, dann liefert er falsche Ergebnisse, ich nehme an, das liegt daran, das der FPU-Stack überläuft.
EDIT: Scheint daran zu liegen, das der FPU-Stack überläuft, wenn ich noch ein fstp einbaue, funktioniert das ganze, gibts noch eine Möglichkeit, ein FPU-Register zu popen, ohne den Inhalt irgentwo hin zu speichern?