Frage zum Stack(Inhalt)
-
Hallo wenn ich folgenden Stackinhalt vorfinde:
Ip l
Ip h
bl
bh
Ip 1
Ip h
Al
AhWie müssten dann die Programmabschnitte lauten, wodurch der Stack so gefüllt wurde, und dann wieder geleert wird.
Ich würde sagen
push ax
call unterprogramm1proc unterprogramm1
pus hbx
call unterprogramm2dann wäre doch der stack in dem obigen zustand oder nicht?
-
Wenn man "Stack" wörtlich nimmt, bekommt man für
push ax call unterprogramm1 push bx call unterprogramm2
Folgendes
Addr. Bytes -8 IP 2 low <- stack pointer zeigt auf IP 2 low -7 IP 2 high -6 bl -5 bh -4 IP 1 low -3 IP 1 high -2 al -1 ah
-
[delete}
-
Wie würde man den Stack wieder geleert bekommen?
Ich würde mir das Ganze dann so vorstelleN:push ax call unterprogramm1 pop ax proc unterprogramm1 push bx call unterprogramm2 pop bx ret proc unterprogramm2 ret
richtig?^^
-
Wenn Parameter über den Stack übergeben werden, gibt es zwei Möglichkeiten ihn wieder auszubalancieren: Entweder die aufgerufen Funktion/Prozedur benutzt
ret nBytes
was äquivalent zu
ret add sp,nBytes
ist, oder du der Aufrufer macht es:
push argument call foo add sp,2
-
hmm ist meine Antwort (oben) aber korrekt, würde das auch gehen?
-
Buntervogel123 schrieb:
hmm ist meine Antwort (oben) aber korrekt, würde das auch gehen?
Meinst du das?
push ax call unterprogramm1 pop ax
Dann würdest du das Funktionsargument entfernen, indem du es in AX popst. Was sinnlos wäre, falls du es nicht behalten willst.