Zitat von
sirius:
Sieht doch alles gut aus. Wo genau ist das Problem?
Der Stackpointer liegt in ebp und wird am Ende durch mov esp,ebp wieder zurückgesetzt.
Die 9 (bzw. 18) pushs dienen nur dazu um Speicherplatz für lokale Variablen (auch versteckte lokale Variablen) zu schaffen und die mit nil zu initialisieren.
Edit: dass hier: "8)" ist "acht)"
Edit2: "self" legt man sich üblicherweise in ebx (da dieses register von andeen Funktionen nicht verändert werden darf). Die Übergabe von self erfolgt trotzdem noch in eax. Wenn man allerdings aus einer Methode eine Methode derselben Klasse aufruft ist natürlich in ebx und eax dasselbe drin.
achso, moment ich glaub ich weiss was du meinst ... ich war da zu schnell und dachte, das es ein fehler sein muß, wenn der nicht in der richtigen reihenfolge popt wie er gepusht hat ... aber man sieht hier nix, da ja der stack pointer am schluß überschrieben wird, und es sein könnte, das alles richtig ist - bzw. das der
asm code richtig ist, und der fehler wo anders liegt ...
also wieder erneut aufmachen und den fehler suchen ... den fakt ist, der gepushte EBX Wert (also das self) ist zum beginn der funktion richtig, aber der gepopte EBX wert ist dann falsch, deshalb funkt dann der rest aus der aufrufenden funktion dann nicht mehr