Stapel
Aus C64-Wiki
Der Stapel, auch "Stack" genannt, ist ganz allgemein ein Zwischenspeicher, auf den nach dem "Last In/First Out"-Prinzip zugegriffen wird: Daten, die als letztes abgelegt werden, werden als erstes wieder entnommen.
Der Prozessor-Stack ist ein besonderer Speicherbereich im RAM eines Computers, in dem die CPU Daten mit typischerweise geringem Speicherverbrauch (insbesondere Rücksprungadressen und Zwischenergebnisse von Unterroutinen) ablegen kann.
Beim C64 bzw. MOS 6510 liegt der Prozessor-Stack in einem 256 Byte großer Speicherbereich von $0100 bis $01FF (Speicherbelegungsplan). Der Stapelzeiger verweist auf die nächste freie Stapelspeicherstelle. Der Stapel wird von oben nach unten gefüllt, d.h. das erste auf den Stapel gelegte Byte wandert nach $01FF; der Stapelzeiger zeigt danach auf $01FE.
[bearbeiten] Der Stapel in BASIC
Von BASIC aus wird der Prozessor-Stack nur implizit bzw. intern durch den BASIC-Interpreter genutzt, allerdings in einem beschränkten und kontrolliertem Ausmaß, sodass auch bei maximaler Nutzung durch ein BASIC-Programm, noch ausreichend Platz für den Prozessor-Stack-Bedarf der BASIC-Interpreter- und KERNAL-Routinen bleibt.
Spezielle Befehle zum direkten Zugriff auf den Stapel gibt es nicht - sie wären auch nicht sinnvoll, da der BASIC-Interpreter durch die "Zweitnutzung" des Prozessor-Stacks durch ein anderes Programm neben ihm nur durcheinander gebracht würde.
- Unterprogrammbefehle GOSUB und RETURN legen Rücksprungreferenzen auf den Stapel bzw. holen sie wieder ab.
Maximale Verschachtelungen: 26 (praktisch allerdings nur 24, wenn der innerste Aufruf zumindest alle BASIC-Befehle in einfacher Form ausführen können soll). - Die Befehle FOR und NEXT legen Verwaltungsinformationen auf dem Stapel ab.
Maximale Verschachtelungen: 10 (praktisch allerdings nur 9, wenn die innerste Schleife zumindest alle BASIC-Befehle in einfacher Form ausführen können soll). - Klammerverschachtelungen von arithmetischen Ausdrücken verwenden im Zuge der rekursiven Auflösung den Stapel.
Maximale Verschachtelungen: 10 - Die Befehle CLR, NEW, RUN leeren den BASIC-Stack.
Werden Schleifen, Unterprogramme oder arithmetische Ausdrücke zu tief ineinander verschachtelt, so erfolgt bei einem Überlauf des Stapels die Meldung des Fehlers ?OUT OF MEMORY ERROR IN Zeilennummer. Andere, spezifische Fehlermeldungen sind den oben erwähnten BASIC-Befehlen zu entnehmen, welche dann eintreten, wenn die Verschachtelung beispielsweise falsch oder unvollständig geformt ist.
[bearbeiten] Der Stapel in Assembler
- PHA, PHP, JSR $hhll, BRK legen Daten am Stapel ab.
- PLA, PLP, RTS, RTI holen Daten vom Stapel.
- TSX und TXS dienen zur Maniplation des Stapelzeigers.
- Durch Interrupts werden Daten (Rücksprungadresse, ggf. Statusregister) am Stapel abgelegt.
