Stack
Ein Stack, Kellerspeicher oder LIFO ist ein Speicher nach dem LIFO-Prinzip (last in, first out). Man kann sich vergleichsweise einen Stack als einen Stapel von Tellern vorstellen, bei dem der zuletzt auf den Stapel gelegte Teller immer zuerst heruntergenommen werden muss um an die darunterliegenden Teller herankommen zu können.
In Prozessoren wird der Stack unter anderem dazu verwendet, um beim Aufruf einer Subroutine die Rücksprungadresse speichern zu können. Das bedeutet, dass man ohne einen Stack keine Unterfunktionen aufrufen könnte.
Auf dem Stack speichert man u.a. die Registerinhalte bei Interrupt- und Funktionsaufrufen und bei höheren Programmiersprachen (HLLs) auch die übergebenen Funktionsargumente sowie die lokalen Variablen.
Die einzelnen Prozessorfamilien legen den Stack entweder in einem speziellen Speicherbereich (Hardwarestack) oder im RAM-Bereich (Softwarestack) ab.
Die PIC Mikrocontroller haben einen Hardwarestack zum Speichern des Programmzählers (der Rücksprungadresse von Unterprogrammen). Die Größe des Stacks (Ebenen) ist je nach PIC Modell vorgegeben. Die neuste Generation der PIC18 Familie haben einen 32-Ebenen-Stack. Die Zahl der Stackebenen beschränkt die Verschachtelungstiefe von Programm und Unterprogrammen.
AVR Mikrocontroller besitzen bis auf wenige Ausnahmen (ATtiny11/12/15) einen Softwarestack.
Um einen Stack zu benutzen benötigt man lediglich einen Zeiger der auf die Stapelspitze, das zuletzt hinzugefügte Element, zeigt. Von diesem ausgehend kann man dem Stapel ein Element hinzufügen oder eines herunternehmen.
Das Hinzufügen wird gemeinhin als "PUSH" bezeichnet,das Herabnehmen als "POP".
Wird die Stapelzeigeradresse beim PUSH inkrementiert, sagt man auch der Stack wächst nach oben. Wird die Stapelzeigeradresse dekrementiert, wächst der Stack nach unten.