Der Stack, organisiert nach dem
gehört zu den grundlegenden Datenstrukturen der Informatik; er ist bei AVR-Prozessoren im SRAM eingebettet. Das LIFO-Prinzip bedeutet, dass das zuletzt auf dem Stapel abgelegte Byte auch zuerst wieder heruntergenommen wird.
Dieses Speicherprinzip ist von grundlegender Bedeutung für das Interrupt-System und den Mechanismus von Prozeduraufrufen bei Mikrocontrollern.
AVR-Mega-Prozessoren enthalten ein Stapelzeiger Register (SPH:SPL), einige wenige Stapel-Instruktionen und einen Stackpointer (SP).
------------------------------------------------------
Wofür wird der Stack benötigt?
Der SP zeigt nach seiner Initialisierung auf das Ende des SRAM-Bereichs und enthält die Adresse, an der das nächste Byte durch eine Push-Operation platziert werden soll.
-----------------------------------------------------
Was gilt es zu beachten?
Bevor der Stack genutzt werden kann, muss er initialisiert werden (nur bei den XMEGA-Typen ist die Initialisierung automatisiert). Dies erfolgt in einer bestimmten Routine zu Anfang eines Programms. Dabei wird das Ende des Stapels auf das letzte Byte im SRAM gesetzt:
Sobald Inhalte auf dem Stack abgelegt werden (PUSH-Instruktion), dekrementiert der SP; er zeigt also nie auf die aktuell abgelegten Daten, sondern immer auf die Adresse, an der das nächste Byte via PUSH-Instruktion abgelegt wird.
-----------------------------------------------------
Die Stack-Instruktionen PUSH und POP
Die beiden Instruktionen für den Stack sind
PUSH Rr speichert den Inhalt von Rr an der Adresse, die im SP angegeben ist und dekrementiert anschließend den SP.
POP Rd inkrementiert zuerst den SP und lädt anschließend das Byte von der Adresse, die im SP steht in das Register Rd.
Übung 1 - Vorübergehende Speicherung von Registerwerten | |
Aufgabe |
|
Material |
|
Programm stack_01.asm
In der Simulation lassen sich die Zwischenstände zu jedem Instruktionsaufruf darstellen und die Registerinhalte überprüfen. Das Programm wird NICHT in den Mikrocontroller gebrannt.
In der folgenden Übung 2 wird genauer untersucht was im Stack passiert, wenn ein Unterprogramm aufgerufen wird. Die beiden neuen Instruktionen sind:
RCALL k
Abb. 2a
und RET
Übung 2 - Rücksprungadressen bei UProgrammaufrufen (Sim) | |
Aufgabe |
|
Material |
|
Programm stack_02.asm
Assembler-Listing von Programm stack_02.asm
<< wird fortgesetzt >>