Hi Daniela,
Pointer sind Zeiger; d.h. Werte die auf einen Speicherbereich zeigen. Ein Stack ist ein Stapel, dh. ein Speicherbereich von zB. 256 Bytes der wie eine Art Schmierzettel funktioniert.
Der Stackpointer ist der Pointer, der auf die aktuelle Adresse des Stack zeigt. Sieh Dir mal die Befehle PUSH und POP an. Mit POP wird ein Wert auf den Stack geschrieben und der Stackpointer (die aktuelle Adresse) um 1 erhöht. Beim Befehl PUSH (engl. ziehen) wird der Wert der auf der aktuellen Adresse vom Stack steht vom Stack gezogen und die Adresse (der Stackpointer) um 1 vermindert. Der Stack arbeitet nach dem FIFO - Prinzip (FIFO => first in first out).
Sinn und Zweck des Ganzen ist :
Wenn im Programm Unterprogramme aufgerufen werden müssen die aktuellen Zustände der Register, die im Unterprogramm verwendet werden, mit dem Befehl PUSH zwischengespeichert (gerettet) werden. Nach der Abarbeitung des Unterprogramms werden die geretteten Register mit dem Befehl POP wieder in den Zustand vor dem Unterprogrammaufruf gebracht. Das Hauptprogramm wird dadurch nicht durch das Unterprogramm gestört. Eventuelle Register für eine Parameterübergabe sind davon natürlich nicht betroffen.
Der Stack kann auch als eine Art Schmierzettel für temporäre Daten verwendet werden, falls die Anzahl der Register mal nicht ausreicht.
Es ist auf jeden Fall wichtig, den Stack sorgfältig zu behandeln. Ein Kardinalfehler in Verbindung mit dem Stack ist, die Nichtbeachtung der Reihenfolge von Retten und Zurückholen der Registerinhalte.
Grüße Klaus
Lesezeichen