Benutzung --------- 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