Alle Werte, die bearbeitet werden, liegen auf dem Datenstack.
Der Stackpointer ist immer im X-Register. Wenn das X-Register
fuer etwas anderes benutzt werden, muss der Wert gespeichert
und spaeter wieder geladen werden:
stx stp
...
ldx stp
Die Berechnungen auf dem Stack erfolgen in umgekehrter polnischer
Notation (UPN).
Ein Hauptprogramm sieht in ACME-Assembler beispielsweise wie
folgt aus:
!to "...", cbm
*=$c000
jmp start
!source "stack.a"
start
+initstp
...
rts
Die Beispiele befinden sich in einem separatem Text.
Makros/Funktionen
-----------------
Beschreibung des Stacks: links von "--" steht der Inhalt vor dem
Aufruf, rechts davon der Inhalt nach dem Aufruf. "w" steht fuer
"word" und bezeichnet einen 16-Bit-Wert.
Name | Beschreibung | Makro | jsr | Stack
--------+----------------------+-------+-----+-------------------
initstp | Initialisierung | x | |
--------+----------------------+-------+-----+-------------------
push | Wert ablegen | x | | ( -- w )
pop | Wert holen | x | | ( w -- )
drop | Wert entfernen | x | | ( w -- )
dup | Wert duplizieren | | x | ( w -- w w )
swap | Werte vertauschen | | x | ( w1 w2 -- w2 w1 )
--------+----------------------+-------+-----+-------------------
lit | Wert ablegen | x | | ( -- w )
true | True ablegen | x | | ( -- 1 )
false | False ablegen | x | | ( -- 0 )
lod | Variable laden | x | | ( -- w )
sto | Variable speichern | x | | ( w -- )
jpc | Bedingter Sprung | x | | ( 0|1 -- )
add | a + b | | x | ( w w -- w )
sub | a - b | | x | ( w w -- w )
mul | a * b | | x | ( w w -- w )
divmod | a div b, a mod b | | x | ( w w -- w w )
div | a div b | | x | ( w w -- w )
mod | a mod b | | x | ( w w -- w )
incr | a ++ | | x | ( w -- w )
eql | a = b | | x | ( w w -- 0|1 )
neq | a <> b | | x | ( w w -- 0|1 )
lss | a < b | | x | ( w w -- 0|1 )
leq | a <= b (fehlt noch) | | |
gtr | a > b (fehlt noch) | | |
geq | a >= b | | x | ( w w -- 0|1 )
outdec | Wert ausgeben | | x | ( w -- )
outchr | Zeichen ausgeben | | x | ( w -- )
--------+----------------------+-------+-----+-------------------
litv | Name Basicvar ablegen| | x | ( -- v )
lodint | Basicvar laden | x | | ( v -- w )
stoint | Basicvar speichern | x | | ( w v -- )
Funktionen hexout und inv (xor mit $ffff) siehe rec.a