letztes Posting gelöst! Nun neues Problem ...

16/08/2008 - 21:37 von Jens Kallup | Report spam
Hallo

ich habe nun den Ausdruck "590-200", und folgenden
"Stack" Code, der vom Evaluierer ausgegeben wird.
Wie kann man nun erreichen, das "_ErgebnisWert"
richtig assembliert wird?
In der derzeitigen Version wird ja anscheinend der
Code nur doppelt ausgeführt ...

Für Infos und Lösungen bin ich sehr dankbar

Gruß
Jens


; a = 590.0
mov edx, 590 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, Ergebnis
call Fix2Gleit
push dword [ebx+4]
push dword [ebx]
call _set_Ergebnis_Wert
; a = 200.0
mov edx, 200 ; Vorkomma
mov eax, 0 ; Nachkomma
mov ebx, Ergebnis
call Fix2Gleit
push dword [ebx+4]
push dword [ebx]
call _set_Ergebnis_sub
add esp, 8
push dword [LClassProperty_masterforma__width]
push dword [_ErgebnisWert]
push dword [LClassID_masterforma]
call _set_this_wert
add esp, 12
push dword [LClassProperty_masterforma__width]
push dword [_ErgebnisWert]
push dword [LClassID_masterforma]
call _set_this_wert
add esp, 12
 

Lesen sie die antworten

#1 Markus Wichmann
16/08/2008 - 22:20 | Warnen spam
Jens Kallup schrieb:
[viel]

Ich habe weder dich noch deinen Code ganz verstanden, darum
entschuldige die Nachfrage: Du möchtest das Problem "590-200" über die
FPU lösen und dabei die Eingabe aus Ganzzahlen nehmen, ja?

erstens: Die FPU ist zwar schön und gut, aber wenn man sie nicht
wirklich braucht, sollte man sie ruhen lassen, denn sie ist sehr
ungenau. Ganzzahlen kann man ja nun bequem durch die normale CPU
jagen, da ist dein Problem ganz flink gelöst:

mov eax, [input1] ;oder ax/al, je nach Größe von input1
sub eax, [input2] ; " " " " " " input2
mov [output], eax; " " " " " " output

zweitens: Wenn es unbedingt die FPU sein muss:

fild Größe [input1]
fild Größe [input2]

;du kannst natürlich auch deine Fix2Gleit-Konstrukte verwenden
;musst dann aber darauf achten, dass die beiden Zahlen in der
;richtigen Reihenfolge auf dem x87 register stack landen.

fsubp
fistp Größe [output]

HTH,
Markus
Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot
pausieren... Bully hats ja auch geschafft.

Ähnliche fragen