home *** CD-ROM | disk | FTP | other *** search
- Beschreibung der Systemworte
-
- Im folgenden wird der Bezeichner 'code' verwendet. Unter code
- dürfen stehen: Literale, Inlinecode, Namen von
- Wörterbuchdefinitionen, Strukturworte und einige sonstige
- Systemworte, aber niemals Definitionsworte.
-
- 1. Definitionsworte:
-
- : Definition einer Prozedur, die als Makro oder als
- Subroutine verwendet werden darf.
- Syntax: : name code ;
- 'name' wird im Wörterbuch eingetragen mit:
- Worttyp = 12, PAR0 = Codeadresse; PAR1 = Codelänge.
- Der Code wird in das .COM-File übertragen.
- Wird 'name' später genannt, so wird
- MOV DI,PAR0 CALL DI compiliert. Ist jedoch
- codelen <= m-limit, so wird der Code als Makro
- eingesetzt.
-
- PROC Definition einer Prozedur, die nur als Subroutine
- verwendet werden darf.
- Syntax: PROC name code ;
- 'name' wird im Wörterbuch eingetragen mit:
- Worttyp = 13, PAR0 = Codeadresse; PAR1 = Codelänge.
- Der Code wird in das .COM-File übertragen.
- Wird 'name' später genannt, so wird
- MOV DI,PAR0 CALL DI compiliert.
-
- VECTOR Definition eines Vektors
- Syntax: VECTOR name ;
- 'name' wird in das Wörterbuch eingetragen mit:
- Worttyp = 14; PAR0 = codeadresse; PAR1 = 3.
- Compiliert wird $C3 $00 $00.
- Ein Vektor kann später mit 'MAKE' gesetzt werden.
- Vektoren können für Vorwärtsreferenzen verwendet werden
- oder um Ein- oder Ausgabe umzulenken.
- Wird 'name' später genannt, so wird
- JMP distance compiliert.
-
- VAR Definition einer Datenstruktur
- Syntax: VAR name [ n , .. c c, ] ;
- VAR name varname ;
- VAR name varname do: code ;
- VAR name varname n
- VAR name varname n do. code ;
- VAR name string c ;
- VAR name " Zeichenkette" ;
- n ist ein 16-Bit Zahlenwert oder der Name eines
- Wörterbucheintrages, c ist ein 8-Bit Zahlenwert.
- Der Code nach do: ist 'privater Code' der Struktur
- 'varname' ist der Name einer bereits vorher definierten
- Datenstruktur.
- Datenstrukturen können:
- (1) mit Zahlen, Konstanten, Codeadressen oder
- Datenadressen initialisiert werden
- (2) Initialisierung und gegebenenfalls privaten Code
- von varname erben. Enthält die neue Struktur ebenfalls
- privaten Code, so wird dieser an den geerbten angehängt
- (3) die Struktur von varname n mal verfielfältigen.
- Die Initiierung ist in diesem Fall 0, privater Code
- wird jedoch übernommen
- (4) Zeichenketten direkt initialisieren
-
- 'name' wird in das Wörterbuch eingetragen mit:
- Worttyp = 1-5; PAR0 = Datenadresse; PAR1 = Datenlänge;
- PAR2 = private Codeadresse; PAR3 = private Codelänge.
- PAR1 Bytes werden im .COM-File reserviert, der
- private Code übertragen.
- Wird 'name' später genannt, so wird compiliert:
- MOV BX,PAR0, der private Code angehängt.
-
- TYP Synonym für VAR
-
- CONST Definition einer 16-Bit-Konstanten
- Syntax: CONST name n ;
- n ist ein 16-Bit Zahlenwert oder ein Wörterbuchname.
- 'name' wird in das Wörterbuch eingetragen mit:
- Worttyp = 10; PAR0 = n oder PAR0 des Wörterbuchnamens;
- PAR1 = 2.
- Im .COM-File wird nichts eingetragen.
- Wird 'name' später genannt, so wird compiliert:
- MOV AX,PAR0.
-
- DCONST Definition einer 32-Bit-Konstanten
- Syntax; DCONST name d ;
- d ist ein 32-Bit Zahlenwert.
- 'name' wird in das Wörterbuch eingetragen mit:
- Worttyp = 15; PAR0 = lo(d); PAR1 = hi(d).
- Im .COM-File wird nichts eingetragen.
- Wird 'name' später genannt, so wird compiliert:
- MOV AX,PAR0 MOV DX,PAR1.
-
- FCONST Definition einer Realzahl
- Syntax; FCONST name r ;
- r ist ein 64-Bit Zahlenwert.
- 'name' wird in das Wörterbuch eingetragen mit:
- Worttyp = 16; PAR0 = lsb(r) .... PAR3 = msb(r).
- Im .COM-File wird nichts eingetragen.
- Wird 'name' später genannt, so wird die Realzahl
- direkt auf den Koprozessorstack geladen.
-
-
-
- 2.Compileranweisungen:
- a) ausserhalb von Definitionen:
-
-
- M-LIMIT Setzt die Makrogrenze fest
- Syntax: M-LIMIT n
- n ist ein beliebiger Zahlenwert, als Grenzen
- werden jedoch nur Werte von 7 bis 64 eingestellt.
- Mit M-LIMIT wird festgelegt, ob eine Kolon-Prozedur
- als Makro oder als Subroutine compiliert wird.
-
-
-
- INCLUDE Öffnet Zugriff auf ein Wörterbuch
- Syntax: INCLUDE Filename
- Es ist nur ein INCLUDE in einem Programm oder
- neuem Wörterbuch erlaubt. Der Filename wird ohne
- Extension angegeben.
-
- DICTIONARY Anlegen eines Wörterbuches
- Syntax: DICTIONARY
- Der Kode des Quellfiles wird beim Compilieren als
- Wörterbuch angelegt. Als Filename wird der Name des
- Quellfiles mit der Extension .DIC verwendet.
-
- STACKSIZE( Einstellung des freien Speichers und der Stackgrößen
- Syntax: STACKSIZE( n1 n2 )
- n1 ist die Bytezahl, die für freien Speicher ( PAD )
- plus Datenstack reserviert werden soll, n2 die Zahl der
- Returnstackbytes. Mit dieser Anweisung können weniger als
- 64kByte für das .COM-File reserviert werden. Wird diese
- Anweisung nicht angegeben, so werden 64kByte reserviert
- mit s0 := $FE00 und r0 := $0000 ( $FFFF + 1 )
-
-
- b) innerhalb von Definitionen ( Code )
-
- ; Beendet ein Definitionswort
- Syntax: siehe :
- ; wird als return ( $C3 ) in das .COM-File compiliert.
-
- [ Leitet Inline-Code ein
- Syntax: [ n1 ..... ni ]
- Die Zahlenwerte werden direkt in das .COM-File
- compiliert. Sie werden in der Regel als Hexzahlen
- angegeben.
-
- ] Beendet Inline-Code
- Syntax: siehe [
-
- MACRO Setzt die Makrogrenze auf 64 Bytes herauf
-
- -MACRO Setzt die Makrogrenze auf M-LIMIT herab
-
- (LONG) Compiliere lange Sprünge
- Syntax: (LONG)
- Sprünge innerhalb des gesamten Codesegments können
- compiliert werden. Diese Einstellung kann mit (SHORT)
- abgestellt werden. Automatisch wird sie durch ';'
- abgestellt.
-
- (SHORT) Compiliere kurze Sprünge
- Syntax: (SHORT)
- Dies ist die Voreinstellung des Compilers. Sind
- kurze Sprünge ( +-127 Byte ) nicht möglich, so meldet
- der Compiler einen Fehler, es muss dann die (LONG)-
- Einstellung angegeben werden
-
-
-
-
-
- 3. Strukturworte (nur innerhalb von Code):
-
- IF Start einer Entscheidungsstruktur
- Syntax: IF T-code ENDIF
- IF T-code ELSE F-code ENDIF
- IF entscheidet am Zustand des Carry-Flags.
- Ist dieses true (=1), so wird T-code durchlaufen,
- ist es false (=0), so wird in Form(1) das Programm hinter
- ENDIF angesprungen, bei Form(2) der F-code durchlaufen
- und hinter Endif fortgefahren.
- IF ELSE ENDIF verändern keine Register.
-
- C@IF Alternative zu IF
- Entscheidungskriterium ist nicht das Carry-Flag,
- sondern das niederwertige Byte einer Datenzelle,
- dessen Adresse c@if in BX erwartet.
- Byte = 0: False; Byte <> 0: True.
- Register werden nicht verändert.
-
- @IF Alternative zu IF
- Entscheidungskriterium ist nicht das Carry-Flag,
- sondern das Wort einer Datenzelle,
- dessen Adresse @if in BX erwartet.
- Wort = 0: False; Wort <> 0: True.
- Register werden nicht verändert.
-
- 0=IF Alternative zu IF
- Entscheidungskriterium ist nicht das Carry-Flag,
- sondern der Wert in AX.
- Wert = 0: False; Wert <> 0: True.
- Register werden nicht verändert.
-
- ELSE Teil der Entscheidungsstruktur
- Syntax: siehe IF
-
- ENDIF Schliesst Entscheidungsstruktur
- Syntax: siehe IF
-
- CASE Leitet Mehrfachverzweigung ein
- Syntax: CASE
- n OF code ;;
- n >OF code ;;
- n <OF code ;;
- ELSE code
- ENDCASE
- CASE verzweigt anhand des Wertes in AX. n ist ein
- Literal. Ist der Wert in AX = > oder < als das Literal,
- so wird der entsprechende code bis ;; durchlaufen und zu
- ENDCASE verzweigt. Der ELSE-Teil kann entfallen. Es
- dürfen beliebig viele OF >OF <OF Sätze angegeben werden.
- Die Worte der Mehrfachverzweigung verändern keine
- Register ( ausser eventuell die Code-Teile).
-
- OF Teil der Mehrfachverzweigung
- Syntax: siehe CASE
-
- >OF Teil der Mehrfachverzweigung
- Syntax: siehe CASE
-
- <OF Teil der Mehrfachverzweigung
- Syntax: siehe CASE
-
- ;; Teil der Mehrfachverzweigung
- Syntax: siehe CASE
-
- ENDCASE Ende der Mehrfachverzweigung
- Syntax: siehe CASE
-
-
- BEGIN Start einer der folgenden Programm-Schleifen:
- Syntax: BEGIN code AGAIN
- BEGIN code UNTIL
- BEGIN code1 WHILE code2 REPEAT
- Form(1) ist eine Endlosschleife. Sie kann nur mit
- ^C beendet werden oder wenn 'code' ein IF EXIT ENDIF
- enthält. Form(2) prüft bei UNTIL das Carry-Flag. Ist
- es false (=0), so wird BEGIN angesprungen, ist es
- true (=1), so wird hinter UNTIL fortgefahren.
- In Form(3) wird das Carry-Flag bei WHILE geprüft.
- Ist es true (=1), so wird code2 durchlaufen und bei
- REPEAT zu BEGIN zurückgesprungen. Ist es false (=0),
- so wird von WHILE aus mit dem Code hinter REPEAT
- fortgefahren. Die Worte der Programmschleife verändern
- keine Register.
-
- AGAIN Teil der BEGIN-Struktur
- Syntax: siehe BEGIN
-
- UNTIL Teil der BEGIN-Struktur
- Syntax: siehe BEGIN
-
- WHILE Teil der BEGIN-Struktur
- Syntax: siehe BEGIN
-
- REPEAT Teil der BEGIN-Struktur
- Syntax: siehe BEGIN
-
-
- DO Programmschleife mit fester Durchlaufzahl
- Syntax: DO code LOOP
- DO code +LOOP
- DO code -LOOP
- DO code /LOOP
- Diese Schleife arbeitet mit einem Zähler (Register CX).
- DO erwartet in DX den Anfangswert, in AX den Endwert
- für den Zähler. DO lädt den DX-Wert nach CX, den AX-Wert
- nach BP, sodass die Register für 'code' wieder frei sind.
- In Form(1) wird bei LOOP geprüft, ob BP = oder > CX ist.
- In diesem Fall wird mit dem Code hinter LOOP
- fortgefahren, sonst wird CX um 1 erhöht und zu DO
- zurückgesprungen. In den Formen(2-4) erwartet LOOP
- einen Wert in AX, der zu CX addiert, subtrahiert oder
- absolut addiert wird.
- Eine DO-Schleife wird in jedem Fall einmal durchlaufen.
-
-
- LOOP Teil einer DO-Schleife
- Syntax: siehe DO
-
- +LOOP Teil einer DO-Schleife
- Syntax: siehe DO
-
- -LOOP Teil einer DO-Schleife
- Syntax: siehe DO
-
- /LOOP Teil einer DO-Schleife
- Syntax: siehe DO
-
-
-
- 4. Präfixe:
-
- AX Lädt AX mit einem Wert
- Syntax: AX n
- n ist ein Zahlenwert oder ein Wörterbuchname.
- Ist n ein Literal, so wird dieses geladen.
- Ist n ein Name, so wird PAR0 geladen.
- Im .COM-File wird compiliert:
- MOV AX,n oder MOV AX,PAR0
-
- BX Lädt BX mit einem Wert
- Syntax: AX n
- n ist ein Zahlenwert oder ein Wörterbuchname.
- Ist n ein Literal, so wird dieses geladen.
- Ist n ein Name, so wird PAR0 geladen.
- Im .COM-File wird compiliert:
- MOV BX,n oder MOV BX,PAR0
-
- ADR Synonym für BX
-
- DX Lädt DX mit einem Wert
- Syntax: AX n
- n ist ein Zahlenwert oder ein Wörterbuchname.
- Ist n ein Literal, so wird dieses geladen.
- Ist n ein Name, so wird PAR0 geladen.
- Im .COM-File wird compiliert:
- MOV DX,n oder MOV DX,PAR0
-
- TO Synonym für DX
-
- , Synonym für DX
-
- SX Bringt Literale auf Datenstack
- Syntax: SX n1 n2 .. ni
- ni sind Zahlenwerte.
- PAR0 von Wörterbuchnamen lassen sich nicht direkt
- auf den Stack bringen.
- Wird in das .COM-File compiliert als:
- DEC SI DEC SI MOV [SI],n
-
- OFFSET Addiert Wert zu BX
- Syntax: OFFSET n
- n ist ein Zahlenwert oder ein Wörterbuchname.
- In das .COM-File wird compiliert:
- ADD BX,n oder ADD BX,PAR0
-
-
-
- 5. Sonstige:
- a) an beliebiger Stelle:
-
- ( Leitet Kommentar ein
- Syntax: ( Kommentar )
- Beide Klammern müssen durch Leerzeichen vom übrigen
- Text getrennt sein. ( Kommentar(NAXOS) ) ist somit
- möglich.
-
- ) Schliesst Kommentar ab
- Syntax: siehe (
-
- b) nur innerhalb von Code:
-
-
- " Leitet ein Stringliteral ein
- Syntax: " Zeichenkette"
- Die Zeichenkette wird mit countbyte im .COM-File
- abgelegt. Die Adresse des countbytes steht in BX.
- Das Leerzeichen hinter dem führenden " wird nicht
- mitgezählt.
-
- ." Gibt Zeichenkette aus
- Syntax: ." Zeichenkette"
- Das Leerzeichen hinter ." wird nicht ausgegeben.
-
- RECLEN Bringt die Länge der letztgenannten Datenstruktur nach AX
- Syntax: RECLEN
- In das .COM-File wird compiliert:
- MOV AX,reclen
-
- MAKE Setzt einen Vektor
- Syntax: MAKE vecname procname
- 'vecname' ist der Wörterbuchname eines zuvor definierten
- Vektors, 'procname' der Wörterbuchname einer zuvor
- definierten PROC-Definition.
- In das .COM-File wird an der adresse von vecname
- compiliert: JMP distance(proc-codeadresse)
-
- { Öffnet den Bedingungsstack
- Syntax: { code }
- '{' wird als PUSH BP, '}' als POP BP compiliert
-
- } Schliesst den Bedingungsstack
- Syntax: siehe {
-
- PUSHF Rettet das Carry-Flag
- Syntax: PUSHF
- Darf nur innerhalb von { ... } verwendet werden.
- Wird im .COM-File compiliert als:
- SHL BP,1
-
-
- ( SYSTEM.DOC Ende )
-