OVER ( n1 n2 --> n1 n2 n1 ) kopiert den Second zum (neuen !) TOS ROT ( n1 n2 n3 --> n2 n3 n1 ) rotiert den Third zum TOS >R ( n --> ) bringt den TOS zum Return-Stack (Zwischenspeicherung, Gebrauch mit Vorsicht !) R> ( --> n ) holt den Wert vom Return-Stack zum TOS zurueck R ( --> n ) kopiert den Return-Stack-Top zum TOS Speicherbezogene Befehle ________________________ @ ( addr --> n ) ersetzt Zellen-Adresse durch ihren Inhalt C@ ( addr --> b ) wie @, jedoch wird auf ein Byte zuge- griffen ! ( n addr --> ) speichere Second in die Adresse auf dem TOS C! ( b addr --> ) wie !, jedoch wird ein Byte abgespeichert +! ( n addr --> ) addiere Second zum Inhalt der Adresse auf dem TOS CMOVE ( from to u --> ) verschiebe u Bytes im Adressraum FILL ( addr u b --> ) fuelle u Bytes im Speicher ab addr mit b ERASE ( addr u --> ) fuelle u Bytes im Speicher ab addr mit Null BLANKS ( addr u --> ) fuelle u Bytes im Speicher ab addr mit Blanks (20H) TOGGLE (addr b --> ) EXOR das Byte in Adresse addr mit Maske b SP@ (--> addr ) uebergibt aktuelle Pos. des Stack-Pointers Arithmetik __________ + ( n1 n2 --> Summe ) Addition von 16-Bit-Zahlen (16-Bit-Summe) D+ ( d1 d2 --> Summe ) Addition von 32-Bit-Zahlen (32-Bit-Summe) - ( n1 n2 --> Diff. ) Differenz n1-n2 * ( n1 n2 --> Produkt ) 16-Bit-Produkt zweier 16-Bit-Zahlen / ( n1 n2 --> Quotient) 16-Bit-Division mit 16-Bit-Ergebnis MOD ( n1 n2 --> Rest ) Modulo-Division (uebergibt Teiler-Rest) /MOD ( n1 n2 --> Rest Quot.) Division mit Rest und Quotient als Resultat */MOD ( n1 n2 n3 --> Rest Quot.) Multiplikation und anschliessende Division mit 32-Bit-genauem Zwischenergebnis ( n1*n2 / n ) */ ( n1 n2 n3 --> Quot. ) wie */MOD, jedoch lediglich Quotient M/MOD ( ud1 u2 --> u3 ud4) Division einer vorzeichenlosen 32-Bit-Zahl mit Uebergabe des 16-Bit-Restes und des 32-Bit-Quot. MIN ( n1 n2 --> Minimum ) uebergibt die kleinere von zwei Zahlen MAX ( n1 n2 --> Maximum ) uebergibt die groessere von zwei Zahlen ABS ( n --> u ) bildet Absolutwert einer 16-Bit-Zahl DABS ( d --> ud ) bildet Absolutwert einer 32-Bit-Zahl MINUS ( n --> -n ) wechselt das Vorzeichen einer 16-Bit-Zahl DMINUS ( d --> -d ) wechselt das Vorzeichen einer 32-Bit-Zahl 1+ ( n --> n+1 ) incrementiert den TOS mit 1 2+ ( n --> n+2 ) incrementiert den TOS mit 2 Vergleichsoperatoren ____________________ < ( n1 n2 --> f ) Flag = 1, falls n1 kleiner n2 > ( n1 n2 --> f ) Flag = 1, falls n1 groesser n2 = ( n1 n2 --> f ) Flag = 1, falls n1 gleich n2 0< ( n --> f ) Flag = 1, falls TOS negativ ist 0= ( n --> f ) Flag = 1, falls der TOS gleich Null ist (negiert auch Wahrheitswert von Flags) Logische Befehle ________________ AND ( n1 n2 --> UND ) bitweise logische UND-Verknuepfung OR ( n1 n2 --> ODER ) bitweise logische ODER-Verknuepfung XOR ( n1 n2 --> EXOR ) bitweise Exclusiv-ODER-Verknuepfung Strukturierende Worte _____________________ DO ... LOOP ( n1 n2 --> ) Schleife, Index laeuft von n2 bis n1-1 mit Increment=1 DO ... +LOOP ( n1 n2 --> ) wie DO ... LOOP, jedoch ist das Index-Increment hier (statt 1) nun be- liebig (wird als zusaetz- licher Parameter an +LOOP uebergeben) I ( --> Index ) Loop-Index --> TOS LEAVE ( ) erzwingt Abbruch der Schleife bei naechster Gelegenheit IF ...(wahr)... ENDIF ( f --> ) (Erreichen von LOOP oder +LOOP) IF ...(wahr)... ELSE ( f -> ) fuehrt Befehle aus, falls das Flag = 1 ist ...(falsch)... ENDIF dto., jedoch wird bei f=0 der FALSE-Teil aus- gefuehrt BEGIN ... UNTIL ( --> f --> ) Schleife mit Abbruch, falls Flag fuer UNTIL = 1 BEGIN ... WHILE ... REPEAT ( --> f --> ) wie BEGIN ... UNTIL, jedoch Abbruch-Test am Anfang des Schleifen- Kernes; REPEAT schliesst die Schleife bedingungs- los nach BEGIN BEGIN ... AGAIN Endlos-Schleife Definitionsworte ________________ : xyz ( ) Begin einer Colon-Definition mit Namen xyz ; ( ) Abschluss der Colon-Definition (SEMI-COLON) VARIABLE xxx ( n --> ) erzeugt eine Variable xxx, die mit n initialisiert ist (xxx uebergibt die Adresse bei Aufruf) CONSTANT yyy ( n --> ) erzeugt eine Konstante yyy mit Wert n (bei Aufruf von yyy wird Wert uebergeben) CREATE zzz ( ) eroeffnet die Definition eines Primitive mit dem Namen zzz (Assembler- bzw. Maschinencode) ;CODE ( ) Abschluss einer Colon-Definition, wenn es sich um die Definition eines Definitions- wortes handelte, wobei die runtime-Execu- tive in Assembler definiert werden soll (Code hinter ;CODE) <BUILDS ... DOES> does : ( --> addr ) wird zur Definition neuer Definitionsworte benutzt, wobei jedoch im Gegensatz zu ;CODE die run- time-Executive in high-level definiert wird Vokabulare __________ CONTEXT ( --> addr ) uebergibt die Adresse eines Pointers zum Context-Vokabular (das zuerst abgesucht wird) CURRENT ( --> addr ) uebergibt die Adresse eines Pointers zum Current-Vokabular (das z.Z. erweitert wird) FORTH ( ) Name des Haupt-Vokabulars (setzt CONTEXT) EDITOR, ASSEMBLER etc. ( ) weitere Vokabular-Namen (setzen CONTEXT) DEFINITIONS ( ) macht das Current-Vokabular zum Context- Vokabular VOCABULARY xyz ( ) deklariert ein neues Vokabular mit dem Namen xyz VLIST ( ) druckt die Namen aller Worte im Context- Vokabular Systemworte und Diverses ________________________ ( ( ) eroeffnet Kommentar, der mit " ) " abge- schlos sen wird; nach " ( " muss ein Space kommen FORGET abc ( ) vergisst alle neuen Definitionen ab (inclusive) abc ABORT ( ) erzwingt Fehler-Abbruch einer Operation ' xxx ( --> addr ) findet die Adresse (PFA) des Wortes xxx im Dictionary (in Definitionen: compi- liert die Adresse) HERE ( --> addr ) uebergibt die Adresse des naechsten freien Platzes im Dictionary PAD ( --> addr ) uebergibt die Startadresse eines Zwischen- spei chers, meist 68 Bytes oberhalb von HERE IN ( --> addr ) System-Variable, haelt Input-Buffer-Offset fuer WORD ALLOT ( n --> ) hinterlaesst eine ungenutzte Luecke (n Bytes) im Dictionary ' ( n --> ) compiliert eine Zahl in das Dictionary (HERE)