16 Register sind schnell belegt. Dafür hat jeder Chip einen Stack mit 512 Plätzen. Das Register sp (Stapelzeiger) zeigt immer auf den nächsten freien Platz.
Stapeln
push 10 # Platz 0 = 10, sp = 1
push 20 # Platz 1 = 20, sp = 2
pop r0 # r0 = 20, sp = 1
peek r1 # r1 = 10, sp bleibt 1
push wertlegt oben drauf.pop r?nimmt das Oberste herunter.peek r?schaut nur nach, ohne zu entfernen.
Was zuletzt hineinkam, kommt zuerst wieder heraus – wie ein Tellerstapel in der Kantine.
Direkt adressieren
Mit get und put greifst du auf einen bestimmten Platz zu, ohne sp zu verändern. db ist dabei das eigene Gehäuse:
put db 5 293.15 # Platz 5 = 293.15
get r2 db 5 # r2 = 293.15
Das geht sogar mit anderen Chips: get r0 d0 3 liest Platz 3 aus dem Stack des Chips an Pin d0. So reden zwei Chips miteinander.
pop auf einen leeren Stack meldet StackUnderFlow, push auf einen vollen StackOverFlow. Und sp ist ein ganz normales Register – überschreibst du es aus Versehen, ist die Stapelordnung dahin.
Schaubild
Übung
Aufgabe
Lege die Zahlen 10, 20, 30 in dieser Reihenfolge auf den Stack. Dann:
r4= der Wert auf Platz 1 des Stacks (direkt mitgetüberdb)- hole alle drei Werte wieder herunter, sodass
r0= 30,r1= 20,r2= 10 r3= der Stapelzeigerspam Ende
Hinweise
Hinweis 1
Dreimal push, dann get r4 db 1 – noch bevor du etwas herunterholst.
Hinweis 2
Dreimal pop: der erste pop liefert die 30.
Hinweis 3
move r3 sp liest den Stapelzeiger.