Blatt 2 Aufgabe 4 (push pop)

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Blatt 2 Aufgabe 4 (push pop)
Hi,

wie ist das denn nochmal mit dem stackpointer? ich hänge mal ein foto an, das den stack so wie in der vorlesung/übung darstellt. Jetzt zeigt esp genau zwischen c und b. wie ist das denn jetzt mit der lese/schreibrichtung? wenn ich mit movl einen wert nach %esp schiebe, schreibt er dann in c oder in b? und bewegt er sich automatisch mit oder müsste ich das dann noch extra dazu addieren oder subtrahieren?

Attachment:
esp.jpg: https://fsi.cs.fau.de/unb-attachments/post_131708/esp.jpg


Der Stack waechst von hohen Adressen zu niedrigen, also “von oben nach unten” im Adressraum. Außerdem zeigt der Stackpointer auf das erste besetzte Element, also das oberste (Achtung: das mit der kleinsten Adresse) auf dem Stack. In deinem Beispiel liegen also a und b auf dem Stack, die anderen gehoeren genau genommen nicht mehr zum Stack. Wenn du jetzt an die Adresse, die im %esp liegt, schreibst, dann ueberschreibst du in diesem Fall den Wert von b.
Der Wert im %esp aendert sich bei push/pop (sowie call und ret) implizit, andernfalls musst du %esp selber aendern (im Endeffekt ist das %esp auch nur ein ganz normales Register, das fuer ein paar besondere Zwecke benutzt wird).


OK, dann muss ich bei einem push-befehl erst 4 vom esp abziehen und dann schreiben. und bei pop muss ich ihn vorher nicht bewegen, sondern kann direkt lesen oder?


Du meinst fuer den Fall, dass du push/pop “selber” implementieren willst, d.h. beim Abbilden auf andere Instruktionen?
Wenn man von alternativen Loesungen absieht, musst du dann beim push erst Platz reservieren, ja. Beim pop daran denken, dass nach dem Lesen der Stack wieder schrumpfen muss.


Cool. Vielen Dank :slight_smile: