Home

TBC (TOKIWA BASIC Compiler) Benutzerhandbuch

image

Contents

1. ointer to DS A to register load pointer to ES lock bus load string byte aa tring word jump on above jump on below jump on below or equal jump on carry Jump on CX zero jump on greater jump on greater or equal jump on less jump on less or equal jump unconditionally jump short unconditionally jump on not below jump on carry jump on no overflow jump on parity odd jump on no sign jump on not zero jump on overflow jump on parity even jump on sign jump on zero load AH into flag p hile not zero o and from registers memory tring byte move string word multiply unsigned change sign no operation invert register memory logical or output to port pop a word from the stack pop flags push operand onto the stack push flags rotate left through carry rotate right through carry repeat if equal repeat if zero repeat if not zero return return far rotate left Ss C loop while zero w S ttet ror rotate right sahf store AH into flags sar shift arithmetic right sbb subtract with carry scasb scan string byte scasw scan string word shl shift left shr shift right stc set carry flag st set direction flag sti set interrupt enable flag stosb store string byte stosw store string word sub subtract test test wait wait xchg exchange xlat translate
2. 4 Die CURSOR Anweisung Mit dieser Anweisung l sst sich der Cursor ein bzw ausschalten Syntax CURSOR lt integer expression gt Dabei steht ein Wert von O f r Aus ein anderer Wert f r Ein 5 Die RDELETE Anweisung Die Anweisung l scht alle Zeichen bis zum Zeilenende Syntax RDEL 6 Die TXCOLOR Anweisung Die Anweisung legt die Farbe f r die Textausgabe fest Syntax TXCOLOR lt integer expression gt Es gelten folgende Zuordnungen von Werten zu Farben O black 1 blue 2 green 3 sky blue 4 red 5 magenta 49 6 yellow 7 white 2 10 Eingebaute Funktionen Anmerkung Wie auch in anderen lteren BASIC Dialekten werden eingebaute Funktionen direkt d h im Unterschied zu benutzerdefinierten Funktionen vgl 2 8 ohne vorangestelltes FN_ aufgerufen Funktionsaufrufe werden au erdem immer als Bestandteil eines Ausdrucks bzw Rechtswert einer Zuweisung verwendet 2 10 1 Integer Funktionen Diese Funktionen sind nur in Integer Ausdr cken verwendbar 1 Die IABS Funktion Die Funktion liefert den Absolutwert Betrag eines Integer Ausdrucks Syntax IABS lt integer expression gt 2 Die IVAL Funktion Die Funktion wandelt eine Zeichenkette in einen Integer Wert um Syntax IVAL lt string gt Erg nzung Die IVAL Funktion interpretiert Zahlen in Dezimal und Hexadezimaldarstellung mit vorangestelltem amp
3. lt arithmetic expression gt lt string expression gt Dabei ist der Typ des rechtsseitigen Ausdrucks durch den Typ der links vom Zuweisungsoperator stehenden Variablen als Integer Real oder String bestimmt Integer Ausdr cke Der rechtsseitige Ausdruck einer Integer Zuweisung wird als Integer Ausdruck behandelt Beispiel integer k m n k m n n dpeek m 1 k m n k m n Real Werte auf der rechten Seite werden implizit in Integer Werte umgewandelt indem eine Rundung auf die n chste Ganze Zahl erfolgt Verwenden Sie die Funktion cint um Teilausdr cke vom Real Typ einzubinden Beispiel Sei x0 1 3 integer x x x0 4 1 zugewiesenes Ergebnis ist 5 1 x cint x0 4 1 zugewiesenes Ergebnis ist 6 2 Die Zuweisungen an die Variable x sind Integer Ausdr cke Im Fall 1 wird x0 einfach in einen Integer vom Wert 1 konvertiert Im Fall 2 ist das Argument der cint Funktion ein Real Ausdruck mit dem Ergebnis 5 2 Die Umwandlung erfolgt explizit mit der cint Funktion 10 Die drei logischen Operatoren or xor und and k nnen in Integer Ausdr cken wie folgt verwendet werden integer x y z x y or z y zZ xor X z x y and amp fff0 Auch der Modulus Operator lasst sich in Integer Ausdrucken verwenden integer x y Z x y mod z Die Prioritat der arithmetischen und logischen Operatoren ist wie folgt festgelegt mod gt gt gt and xor or h chste Priorit t gt niedrigste Pr
4. 2 1 1 Das Zeilenformat 1 Zeilen Alle Zeilen eines Quelltextes m ssen mit einem Wagenr cklauf ODH gefolgt von einem Zeilenvorschub OAH enden Die Zeilenl nge darf 255 Zeichen nicht berschreiten 2 Zeichencodes F r die bersetzung wird ASCII Code verwendet wobei es keine Unterscheidung zwischen Gro und Kleinschreibung von Bezeichnern gibt d h Zeichen werden wenn sie nicht zu einem in einfache Anf hrungszeichen Apostrophe eingeschlossenen String geh ren in Gro schreibung umgewandelt 3 Zeilennummern Zeilennummern werden nur als Referenzen f r Spr nge Sprungmarken verwendet Deshalb k nnen sie beliebig vergeben werden und m ssen nicht aufsteigend geordnet sein Die Zeilennummern im Hauptprogramm Unterprogrammen und Funktionen sind jeweils unabh ngig voneinander Somit ist es zul ssig in allen Routinen die gleichen Zeilennummern zu verwenden 4 Mehrfachanweisungen Innerhalb einer Zeile k nnen mehrere Anweisungen jeweils durch einen Doppelpunkt getrennt notiert werden 5 Reservierte W rter Reservierte W rter Schl sselw rter bestehen aus einer Folge alphanumerischer Zeichen wobei nicht zwischen Gro und Kleinschreibung unterschieden wird Das erste Zeichen das auf ein Schl sselwort folgt darf kein alphanumerisches Zeichen sein 6 Tabulatoren Leerzeichen Leerzeilen Es ist m glich zwischen W rter eine beliebige Anzahl von Leerzeichen oder Tabulatoren einzuf gen Dar ber h
5. F r jede globale Variable wird Speicherplatz in Datensegment belegt dessen Offset Adresse mit der LOC Funktion bestimmt werden kann Mit DIMX definierte erweiterte Arrays beginnen immer an Paragraphen durch 16 teilbare Adressen also an Segmentgrenzen Die Segmentadresse des erweiterten Arrays wird im Datensegment gespeichert Mit DIM definierte Arrays liegen dagegen direkt im Datensegment Die Startadresse eines solchen Arrays ist die seines ersten Elements 9 Die CINT Funktion Die Funktion rundet den Wert eines Real Ausdrucks auf den n chsten Integer Wert Syntax CINT lt real expression Beispiel BEINE cane 253 Cink 225 EINE SH gt SITE FT 7 Cine 42 7 ergibt 52 2 3 4 3 3 10 Die ASC Funktion Die Funktion liefert den ASCII Code des ersten Zeichens einer Zeichenkette Syntax ASC lt string gt Beispiel ASC abcd ergibt 61h 11 Die INSTR Funktion Die Funktion gibt 1 zur ck wenn string2 in string 1 enthalten ist andernfalls 0 Syntax INSTR lt integer expression gt lt stringl gt Das Ergebnis des optionalen Integer Ausdrucks bestimmt die Zeichenposition in string1 an der der Vergleich beginnen soll Der Standardwert ist 0 lt string2 gt Beispiel integer n X n 2 aS abcdefg x instr n a de Das Ergebnis sollte hier 4 lauten 12 Die LEN Funktion Die LEN Funktion liefert die Anzahl der Zeichen in
6. 2 5 Anweisungen zur Datenausgabe 2 5 1 Die PRINT Anweisung 1 Die Grundform der PRINT Anweisung Die PRINT Anweisung gibt Ergebnisse der Berechnung eines Ausdrucks aus Syntax PRINT lt expression gt lt expression gt Beispiel print 1 2345 678 9 1 1 ABCDEF test print 1 2345 678 9 1 1 ABCDEF test end Als Ergebnis sollte Folgendes ausgegeben werden 1 2345 690 ABCDEF test 1 2345 690 ABCDEFtest Werden die einzelnen Ausdr cke mit einem Komma getrennt so wird der Cursor gegen ber dem Anfang der Ausgabe des jeweiligen Ausdrucks um 16 Stellen f r Real Werte bzw mindestens 8 Stellen f r Integer und String Werte nach rechts versetzt Verwendet man statt eines Kommas ein Semikolon wird der Cursor nicht um einen festen Betrag verschoben sondern lediglich Leerzeichen hinter numerischen Ausgaben eingef gt Am Ende der PRINT Anweisung wird ein Zeilenumbruch Wagenr cklauf und Zeilenvorschub ausgegeben sofern die Anweisung nicht mit einem Komma oder Semikolon abgeschlossen wurde 2 Festlegung des Ausgabeziels per Index Das Ausgabeziel wird mit dem n Kommando festgelegt Syntax PRINT lt index number gt lt expression gt lt expression gt Dabei kann index number Werte von 0 bis 5 annehmen und wird mit 0 initialisiert Ein einmal festgelegter Ausgabeindex bleibt bis zu einer Neufestlegung g ltig Die Indizes haben folgende Bedeutun
7. 9 Option T Die Option erlaubt die Ablaufverfolgung Trace des kompilierten Objekts 10 Option TL Die Option listet den Programmablauf Erg nzung Mit dieser Option werden w hrend des Programmablaufs einige Zeilennummern aus dem Quelltext jeweils in eckigen Klammern zus tzlich zu den normalen Programmausgaben auf die Konsole geschrieben Soweit sich feststellen lie werden jeweils die Zeilennummer vor einer Verzweigung Sprung Unterprogrammaufruf die Zeilennummer der Verzweigung selbst sowie die Zeile nach der R ckkehr aus einem Unterprogramm ausgegeben 65 11 Option C Mit dieser Option wird eine COM Datei statt einer EXE Datei als Ausgabe erzeugt Anmerkung Weil bei COM Dateien der EXE Header entf llt ist hier das erzeugte Programm etwas kleiner Beide Varianten belegen beim Programmstart komplett den gr ten verf gbaren Speicherblock in DOS also nahezu den ganzen verf gbaren Speicher so dass das Starten von Kindprozessen oder die Anforderung von Speicher ber die DOS Funktion 48H ohne gr ere Tricks nicht m glich ist 12 Option O Die Option schaltet die Optimierung ein Anmerkung Soweit sich feststellen lie bedeutet Optimierung die Ausrichtung aller Symbole Variablen Einsprungadressen f r Prozeduren an geradzahligen Adressen Daraus folgt eine etwas gr ere Ausgabedatei Auf Systemen mit 16 Bit Datenbus also nicht beim i8088 bewirkt die A
8. Mit den Optionen wl und wp lassen sich zwar die nutzbaren Gr en in Stack und Datensegment reduzieren Einen praktischen Nutzen hat dies jedoch nicht weil der Bereich f r erweiterte Arrays mit DIMX definiert immer 64K oberhalb des Stack Segments beginnt Das bedeutet dass die Segmentadresse des ersten erweiterten Feldes stets SS 1000H ist Au erdem verlangen mit TOKIWA Basic bersetzte Programme aus diesem Grund dass oberhalb des Stacksegment Wertes mindestens 64K freier Speicher vorhanden sein m ssen Erweiterte Felder beginnen stets an Paragraphengrenzen durch 16 teilbare Adressen Die Adressen selbst werden im Datensegment fortlaufend abgelegt Das Anlegen der Felder erfolgt w hrend der Programminitialisierung Oberhalb dieser Segment Adressliste befinden sich vermutlich die festen Puffer gefolgt von der Liste der globalen Variablen Diese Liste enth lt f r numerische Variablen die Variablenwerte selbst f r Strings deren Adressen Offsets in DS Die Elemente einfacher Arrays mit DIM definiert liegen ebenfalls fortlaufend in diesem Bereich 64 Achtung Die Verringerung des Wertes der Option wl verkleinert den nutzbaren Bereich im Datensegment ohne dass die Einhaltung dieser Restriktion vom Compiler gepr ft wird Dies kann dann zu Laufzeitfehlern beim Zugriff auf Variablen fuhren Der Wert von wp darf auch das berpr ft der Compiler nicht nicht kleiner als der von wl sein da sich sonst Stack und Daten
9. Q dl 22 0 23h 4 16 2 2 6 Die CONTINUE Anweisung Die CONTINUE Anweisung Uberspringt der Rest des Anweisungsblocks in FOR NEXT WHILE WEND REPEAT UNTIL Schleifen und beginnt den nachsten Schleifendurchlauf Beispiel integer n for n 0 to 10 if n 5 then continue print n next n end Das Ergebnis sieht wie folgt aus 0 1 2 3 4 06 F 8 9 10 2 2 7 Die STOP Anweisung Die Anweisung bricht die Ausf hrung des laufenden Programms ab und kehrt zum Betriebssystem zur ck wobei end auf der Konsole ausgegeben wird Syntax STOP Beispiel if x lt 0 then stop Die STOP Anweisung kann an beliebiger Stelle des Programms berall dort wo eine Anweisung notiert werden kann stehen 2 2 8 Die END Anweisung Mit der END Anweisung l sst sich das Ende des vom Compiler zu bersetzenden Quelltextes festlegen Syntax END Mit dieser Anweisung wird das Kompilieren abgebrochen Hinweis Im Hauptprogramm ist diese Anweisung optional Sie kann z B verwendet werden um hinter dem eigentlichen Quelltext erl uternde Informationen zum Programm zu notieren In Quellcode Bibliotheken die mit der MERGE Anweisung siehe 2 2 11 eingebunden werden ist sie zwingend erforderlich 17 Anmerkung Soweit sich feststellen lie ist obiger Hinweis nicht ganz korrekt Die END Anweisung ist auch im Hauptprogramm obligatorisch Au erdem muss sie mit einem Zeilenumbruch abgeschlossen werden andernfalls produziert der C
10. Beispiel for n 0 to 10 x0 n 10 print 35 1 x0 12 6 sin x0 cos x0 next n end 36 Schauen Sie sich das Ergebnis des Beispiels an 0 0 0 000000 1 000000 0 1 0 099833 0 995004 02 0 198669 0 980067 0 3 0 295520 0 955336 0 4 0 389418 0 921061 05 0 479426 0 877583 0 6 0 564642 0 825336 0 7 0 644218 0 764842 0 8 0 717356 0 696707 0 9 0 783327 0 621610 1 0 0 841471 0 540302 Wie Sie sehen bleibt die zuletzt festgelegte Formatierung erhalten so dass die Ergebnisse der cos Funktion wie die der sin Funktion ausgegeben werden Beim freien Format wird der Typ des jeweiligen Ausdrucks aus der ersten darin vorkommenden Zahl Variablen oder einem Funktions R ckgabewert bestimmt Das Kriterium der Typbestimmung ist dabei dasselbe wie beim linksseitigen Ausdruck in den Bedingungen der von IF WHILE bzw UNTIL Beispiel f r die Auswertung als Integer Ausdruck print peek 12 3 Der folgende Ausdruck wird als Real ausgewertet print sin xyz 0 1 Weitere Beispiele 1 print 1 sin 0 1 ergibt 1 0998334 als real Wert 2 prink 5 3 0 ergibt 1 6666667 als real Wert 3 print 5 3 ergibt 1 als integer Wert 4 print cint 5 3 ergibt 2 wobei das Argument ein real Wert ist 5 print peek 12 3 1 f hrt zu einem Syntaxfehler gemischte Typen Verwenden Sie print float peek 12 3 1 um den Fehler bei 5 zu vermeiden Beispiel f r die Tabellenausgabe mit Auswertung von Tabulator Zeichen subrouti
11. Die Option erzwingt die explizite Deklaration aller numerischen Variablen deren Name 6 oder mehr Zeichen lang ist als integer oder real 3 Option S Mit dieser Option erhalten nicht explizit deklarierte Variablen deren Name nur aus einem einzigen Buchstaben besteht automatisch den Typ integer 4 Option F Die Option legt die intern verwendeten Ausgaberoutinen fur die Anweisungen PRINT 0 und LOCATE entsprechend nachfolgender Tabelle fest Option Ausgaberoutine Cursor Steuerung default int 29h ah 6 int 21h 0 int 29h int 29h LEL ah 6 int 21h ah 6 int 21h 2 ah 6 int 21h ah 2 int 21h FES ah 2 int 21h ah 2 int 21h 5 Option W Mit dieser Option lasst sich die Initialisierung der Pufferbereiche beeinflussen Die in der nachfolgenden bersicht angegebenen Werte sind die voreingestellten Standardwerte wt 130 temporary buffer size read etc wi 128 input buffer size max 256 wb 256 string operation buffer size wl sfff8 upper limit of string area in data segment ws 4096 stack area wp amp fffe stack pointer Erg nzung zur Speicheraufteilung Bei der Initialisierung wird das Datensegment offensichtlich auf dem n chsten freien Paragraphen oberhalb des Codesegments dessen Gr e sich aus dem Programmcode ergibt angelegt F r die Initialisierung des Stack Segments wird zum Wert von DS die Anzahl der entsprechend der Stackgr e Option ws ben tigte Anzahl von Paragraphen addiert
12. Ist die bergebene Zeichenkette nicht oder nicht vollst ndig als Integer Zahl interpretierbar so wird kein Fehler ausgel st sondern es werden vom Anfang beginnend so viele Zeichen interpretiert wie interpretierbar sind Beginnt die Zeichenkette mit einem f r Zahlen ung ltigen Zeichen so ist das Ergebnis 0 F hrende Leerzeichen werden ignoriert Beispiel PRINT IVAL 23 IVAL 23 IVAL 23 IVAL amp 23 IVAL amp 23 IVAL 2 9 ergibt 23 23 23 35 0 2 3 Die INP Funktion Die Funktion liest ein Byte vom angegebenen Port und liefert dessen Wert als Ergebnis Syntax INP lt integer expression gt 50 Der Wert wird im Low Byte des Ergebnisses abgelegt und das High Byte mit Null aufgef llt 4 Die DINP Funktion Die Funktion liest ein Wort 2 Bytes vom angegebenen Port Syntax DINP lt integer expression gt Anmerkung Genau genommen wird das Low Byte des Ergebnisses vom angegebenen Port und das High Byte vom darauffolgenden Port gelesen 5 Die PEEK Funktion Die Funktion liest ein Byte von der angegebenen Speicheradresse Syntax PEEK lt integer variable gt lt integer expression Beispiel integer x address x peek address Beispiel f r das Lesen aus einem anderen Segment integer x y address x amp a000 eseg Adresse y peek x address zeigt in eseg Anmerkung Fur die Adressierung von Daten mit S
13. VALUE lt operator gt lt subsequent integer expression gt Das Ausrufezeichen reprasentiert dabei den aktuellen Wert des AX Registers Beispiel value 3 Hier wird 3 zum aktuellen Wert des AX Registers addiert 3 Zuweisung Syntax VALUE lt integer or string variable gt Der Inhalt des AX Registers wird der Variablen zugewiesen 3 5 Beispiele zur Assembler Programmierung 1 Referenzieren von BASIC Variablen integer var ary exary dim ary 10 dimx exary 20 mov ax var mov var ax mov ax ary 2 mov es exary inc var call var jmp var Dabei d rfen die Register ax cx dx al cl dl etc sowie reservierte W rter des Assemblers siehe 2 9 9 nicht als Variablen verwendet werden Zuweisungen von an 8 Bit Register n mov al var mov ary 2 bl inc byte ptr var Offset Adressen mov bx offset var mov si offset ary 2 68 mov ax bxtsitoffset ary 0 Zugriff auf Parameter in SUBROUTINE und FUNCTION Anweisungen mov ax arg Vine arg Dies wird bersetzt in mov ax bp n und inc word ptr bp n Erg nzung Unterprogramme und Funktionen werden in TOKIWA Basic nach C Konventionen aufgerufen Dies bedeutet dass die Argumente die hier grunds tzlich 16 Bit breit sind in umgekehrter Reihenfolge das hei t das letzte zuerst auf den Stack gelegt werden Zuletzt wird vor dem Aufruf die R ckkehradresse 16 Bit Offset im Codesegment es gibt nur NEAR Auf
14. _const 1234 _port amp 80 _size 100 2 1 lt Wertfestlegung mit konstantem Ausdruck integer n X y dim y _size Feld mit Konstante als Gr enangabe n dpeek _const _ size Konstante als Argument x inp _ port Solche Konstanten werden bereits vom Compiler verarbeitet Sie sind in beliebigen ganzzahligen Ausdr cken und auch im Inline Assembler verwendbar 2 2 3 Deklaration von Datenfeldern Arrays 1 Die DIM Anweisung 14 Die DIM Anweisung dient der Deklaration von Datenfeldern Arrays mit ihrem Namen und der zugeh rigen Feldgr e Syntax DIM lt array name gt lt maximum of index gt lt maximum of index gt Es werden ein und zweidimensionale Felder unterst tzt Beispiel integer a real x0 dim a 9 x0 20 30 test 100 Die Feldnamen sowie Datentypen der Feldelemente werden zun chst wie einfache Variablen deklariert Mit Hilfe der darauf folgenden DIM Anweisung erfolgt die Festlegung von Dimension und Gr e Die Indexz hlung beginnt stets mit Null F r das zehnelementige Integer Array in obigem Beispiel k nnen somit die einzelnen Feldelemente mit a 0 a 1 a 9 angesprochen werden Die Elemente von zweidimensionalen Feldern werden im Speicher fortlaufend in der Reihenfolge x0 0 0 x0 1 0 x0 2 0 x0 0 1 x0 1 1 usw angelegt Zum Ansprechen der Elemente des String Arrays werden test 0 test 1 usw verwendet Die Maximall nge der einzelnen Zeichenkettenelemente b
15. args end 30 Das oben erwahnte reservierte Wort DUMMY ist in der Originaldokumentation nicht erklart Es kann als Argument bei der Definition sowie beim Aufruf von Unterprogrammen bzw Funktionen verwendet werden und hat offenbar den Zweck ungenutzte Argumente zu kennzeichnen Intern wird es wie eine benannte Real Konstante mit dem Wert 0 behandelt 2 3 15 Die USER Anweisung Die Anweisung ruft ein in Maschinensprache geschriebenes Unterprogramm auf Syntax USER lt memory address gt lt argument gt Argumente Register 7 AX 2 BX AX 3 CX BX AX 4 DX CX BX AX Die Inline Assembler Anweisung CALL sollte gegen ber der USER Anweisung bevorzugt werden Anmerkung Wegen der Verwendung der Standardregister zur Argument bergabe m ssen die Argumente 16 Bit Integer Werte sein 2 4 Anweisungen zur Dateneingabe 2 4 1 Die INPUT Anweisung Die INPUT Anweisung erlaubt die interaktive Zuweisung von Uber die Konsole eingegebenen Werten an Variablen Syntax INPUT lt message gt lt variable gt lt variable gt Die Konsoleneingabe wird entsprechend der Typen der Argumente konvertiert und den als kommaseparierte Liste angegebenen Variablen zugewiesen Dabei muss die gesamte Dateneingabe auf einmal erfolgen Beispiel 10 input x y x y print X Y xty goto 10 end In obigem Beispiel wird nach der Eingabeaufforderung x y ein Fragezeichen ausgegeben Dies l sst sic
16. call test 10 3 0 string x x0 x x y In obigem Beispiel haben die Argumente die Typen integer real string integer string und integer Hinweis DUMMY ist ein reserviertes Wort Beachten Sie dass die CALL Anweisung in traditionellem BASIC nicht existiert Argumente vom Typ integer werden als Werte by value Argumente der Typen real und string als Referenzen by reference bergeben Ein String Argument enth lt somit die Startadresse Offset der Zeichenkette Au erdem k nnen vollst ndige numerische Arrays als Argumente bergeben werden wobei hier der Name des Arrays gefolgt von einem leeren Klammerpaar anzugeben ist Beispiel call name arrayl array2 Erg nzungen Die Forderung nach bereinstimmung der Argumentanzahl und der Argumenttypen zwischen der Definition und dem Aufruf eines Unterprogramms wird vom Compiler nicht berpr ft Eine Verletzung dieser Forderung kann also zu Fehlern zur Laufzeit f hren Die Interpretation der Argumente erfolgt grunds tzlich so wie in der Definition des Unterprogramms festgelegt Deshalb ist die Definition der Typen der Parameter auch obligatorisch Werden numerische Felder als bergabeparameter verwendet so ist innerhalb des Unterprogramms der Elementtyp zu definieren Beispiel subroutine display arguments real arguments print arguments 0 arguments 1 return subend real args dimx args 2 args 0 2 args 1 1 3 call display
17. so wird ein Laufzeitfehler vom Typ vgl Fehler Referenz nicht gefunden ausgel st F hrende Leerzeichen werden ignoriert Beispiel print val le2 val 1 val 1 8 val 1 8 ergibt 100 1 1 8 1 60 2 10 3 Funktionen fur Zeichenketten Diese Funktionen sind nur in String Ausdr cken verwendbar 1 Die CHR Funktion Die Funktion gibt Zeichen Code des Wertes des als Argument Ubergebenen Integer Ausdrucks zuruck Syntax CHRS lt integer expression gt Anmerkung Genau genommen ist das Ergebnis eine Zeichenkette die aus h chstens falls der Wert des Ausdrucks nicht Null ergibt einem Zeichen besteht Der Zeichencode dieses Zeichens ist einfach der Wert des Low Bytes des Integer Wertes 2 Die RIGHT Funktion Die Funktion liefert die rechte Teilzeichenkette eines Strings mit h chstens der angegebenen L nge Syntax RIGHTS lt string gt lt integer expression gt Beispiel a right abcdefg 3 Hier wird die Zeichenkette efg zuruckgegeben Anmerkung Ist die angegebene Lange gr er als die Lange der Quell Zeichenkette wird die gesamte Zeichenkette zur ckgegeben Eine Langenangabe kleiner 1 einschlie lich negativer Werte ergibt eine leere Zeichenkette 3 Die MID Funktion Die Funktion liefert eineTeilzeichenkette eines Strings beginnend beim festgelegten Index mit h chstens der angegebenen L nge Syntax MIDS
18. 2 3 11 Die ON ERROR GOTO GOSUB Anweisung Die Anweisung legt fest dass beim Auftreten eines Fehlers zur durch Zeilennummer bzw Label spezifizierten Zeile verzweigt GOTO oder ein Unterprogramm aufgerufen wird GOSUB Syntax ON ERROR GOTO lt line number gt lt label gt ON ERROR GOSUB lt line number gt lt label gt Die mit der Anweisung festgelegte Zuordnung bleibt bis zur erneuten Definition einer solchen Zuordnung erhalten 26 27 Erganzungen Zweck des Konstrukts ist die Definition von Routinen zur Fehlerbehandlung Die ON ERROR Anweisung leitet dabei einen gesch tzten Programmabschnitt ein Tritt innerhalb eines solchen Bereichs ein Fehler auf so wird zur angegebenen Programmstelle verzweigt wo dann ublicherweise eine Fehlerbehandlung oder im schlimmsten Fall ein definierter Programmabbruch durchgefuhrt wird Ein mit ON ERROR eingeleiteter Bereich gilt bis zur nachsten ON ERROR Anweisung Eine explizite Aufhebung der ON ERROR Anweisung existiert nicht Die Festlegung des Bereichs erfolgt dabei zur Laufzeit d h die ON ERROR Anweisung wird nur wirksam wenn sie tats chlich ausgef hrt wird Das Ziel der ON ERROR Anweisung Label oder Zeilennummer bleibt auch dann global g ltig wenn es sich innerhalb eines mit SUBROUTINE definierten Unterprogramms befindet Nach der R ckkehr aus einem mit der ON ERROR GOSUB Anweisung festgelegten Unterprogramm wird die Ausf hrung bei der auf ON ERROR GOSUB
19. Die IF THEN ELSE Anweisung dient der bedingten Abarbeitung von Programmabschnitten Sie f hrt falls der angegebene Bedingungsausdruck den Wert true ergibt eine Anweisung oder Anweisungsfolge A andernfalls optional eine Anweisung oder Anweisungsfolge B aus Syntax 1 IF lt conditional expression gt THEN lt statement A gt ELSE lt statement B gt Syntax 2 IF lt conditional expression gt THEN lt procedure A gt ELSE lt procedure B gt ENDIF In der Variante 1 ist die Codegr e der Anweisung auf 127 Bytes begrenzt und die Notation erfolgt in einer logischen Zeile Beispiel if a lt O then n 1 print M else p 1 print P In der Variante 2 wie im traditionellen BASI erweitert und muss mit ENDIF abgeschlossen werden Beispiel if a lt O then n 1 print M else p 1 PELNE PY endif 21 Wie im Beispiel erkennbar muss in der erweiterten IF Anweisung die erste Zeile mit dem Schlusselwort THEN enden Eine Schachtelung von IF Anweisungen wie im folgenden Beispiel ist ebenfalls zulassig if a gt 0 then if b gt O then print else print else print Nachfolgende erweiterte Anweisung nach Syntax 2 fuhrt zum selben Ergebnis if a gt O then if b gt O then print tr else PELNE YS endif else PELNE a endif F r bedingte Sprunganweisungen sind folgende Varianten erlaubt if a gt 0 then 200 if a gt 0 then goto 200 Achtung Lo
20. Genau genommen betrifft diese Option nur lokale Variablen vom Integer Typ da andere lokale Variablen ohnehin immer statisch sind vgl Erg nzung zu 1 66 Ist die Option gesetzt werden die innerhalb eines benannten Unterprogramms bzw einer Funktion definierten lokalen Integer Variablen nicht auf dem Stack sondern global im Datensegment angelegt Ihre Sichtbarkeit bleibt dennoch lokal 15 Option Q Mit dieser Option wird beim Auftreten eines Syntaxfehlers auf einen Tastendruck gewartet 3 2 Trace Modus Bei eingeschaltetem Trace Modus kann die Ablaufverfolgung mit folgenden Tastenkombinationen interaktiv gesteuert werden Key code Aktion Z Ablauf unterbrechen Programm anhalten L Listing des Ablaufs einschalten Q Listing des Ablaufs ausschalten AG R ckkehr zum System Programmabbruch Beispiel A gt TBC TL HANOI lt cr gt Innerhalb des Quelltextes kann die Ablaufverfolgung abschnittsweise zu bzw abgeschaltet werden Syntax TRACI TRACI on off 3 3 Referenzierung von Zeilennummern Mit einem At Symbol eingeleitete Label Bezeichner Namen von Unterprogrammen und Zeilennummern k nnen zur Referenzierung einer Zeile verwendet werden 3 4 Arbeiten mit der VALUE Anweisung 1 Einfache Integer Verarbeitung Beispiel value atb Das Ergebnis verbleibt im AX Register es erfolgt keine Zuweisung an eine Variable 67 2 Fortsetzung eines Ausdrucks Syntax
21. INT Funktion Die Funktion liefert den gr ten ganzzahligen Wert der nicht gr er als der Wert des Arguments ist Syntax INT lt real expression gt Beispiel INT 2 3 ergibt 2 0 INT 2 3 ergibt 3 0 Anmerkung Im Unterschied zur CINT Funktion 10 wird hier keine echte Rundung durchgef hrt Au erdem ist das Ergebnis vom Typ Real nicht Integer 5 Die FIX Funktion Die Funktion liefert den ganzzahligen Anteil eines Real Wertes Syntax FIX lt real expression gt Beispiel FIX 2 3 ergibt 2 0 Anmerkung Der gebrochene Teil wird einfach abgeschnitten es gibt also keine Rundung Das Ergebnis ist von Typ Real nicht Integer 6 Die SQR Funktion Die Funktion berechnet die Quadratwurzel des Arguments Syntax SOR lt real expression gt Im Fall eines negativen Arguments wird ein Fehlerzustand vom Typ Z vgl Fehler Referenz nicht gefunden erzeugt 56 7 Die SIN Funktion Die Funktion berechnet den Sinus des im Bogenma Radiant gegebenen Arguments Syntax SIN lt real expression gt 8 Die COS Funktion Die Funktion berechnet den Kosinus des im Bogenma Radiant gegebenen Arguments Syntax COS lt real expression gt 9 Die TAN Funktion Die Funktion berechnet den Tangens des im Bogenma Radiant gegebenen Arguments Syntax TAN lt real expression gt Anmerkung Obwohl die Tangens
22. SGNDWDOGQH Py SGaocpR EGG no corresponding to FOR WHILE REPEAT no label to refer ndefined array ndefined or unassigned integer variable anges over for relative jump o OPEN statement nassigned real variable ndefined subroutine or function ndefined variables at A V option disagreement with NEXT variable 3 9 Laufzeit Fehlermeldungen numerical data string data delimiter D out of data E end of file F no file I integer range over at string area O overflow Z fatal No file error 73 3 10 Zum Schluss Dieses Handbuch wurde aus dem Japanischen ins Englische Ubersetzt Ich danke Ihnen dass Sie bereit sind ein so unvollkommenes Handbuch dennoch zu lesen December 30 2000 by Dr Genji OKADA E Mail okada en3 ehime u ac jp Die Deutsche bersetzung geht etwas ber die urspr ngliche Fassung hinaus in dem der Versuch unternommen wurde offene Fragen des Originals zu kl ren um so die Verwendung des Compilers zu erleichtern Daraus ergeben sich eine Reihe von Anmerkungen und Erg nzungen die im Text durch Einrahmung der jeweiligen Abschnitte gekennzeichnet sind 31 Dezember 2012 R Erik Ebert E Mail ebert kiezsoft de 74
23. Zeile nicht mit einem Zeilenumbruch abgeschlossen wurde was z B bei der letzten Zeile einer Datei vorkommen kann Zum 33 Abfangen eines solchen Fehlers bietet sich die Verwendung der ON EOF GOTO Anweisung vgl 2 3 12 an Beispiel Ausgabe einer Textdatei AAY input File name open name loop forever while 1 gt 0 on eof goto end line read 1 print 1 continue end break wend end 2 4 5 Die READ Anweisung Die Anweisung liest Bin rdaten aus einer zuvor mit OPEN ge ffneten Datei und weist sie den als Argumente angegebenen Arrays zu Syntax READ lt array gt lt array gt Nach dem Lesen wird die Datei automatisch geschlossen Die Anzahl der gelesenen Bytes wird au erdem im Register AX abgelegt Beispiel integer ary dim ary 25000 input File name a open a read ary print bytes end Erganzung Als Argumente k nnen Felder Arrays mit den Basistypen integer und real verwendet werden Die Ausf hrung der Anweisung bricht ab wenn das Dateiende erreicht oder alle als Argumente angegebenen Felder gef llt sind Der im Register AX zur ckgegebene Wert ist die Anzahl der Bytes die in das als letztes Argument angegebene Feld geschrieben wurden Die Datei wird am Ende der READ Anweisung automatisch geschlossen Deshalb existiert keine Anweisung die eine mit OPEN ge ffnete Datei siehe 2 6 2 explizit schlie t 34
24. betr gt 20 Zeichen die Anzahl der Parameter h chstens 62 Am Anfang des Rumpfes des Unterprogramms m ssen Integer und Real Parameter in der Reihenfolge ihres Auftretens im Prozedurkopf mit Hilfe von INTEGER und REAL Anweisungen deklariert werden Erg nzung String Parameter m ssen und k nnen nur dann mit character deklariert werden wenn kein Name mit abschlie enden Zeichen verwendet wird 40 Der optionale Ruckgabewert setzt beim R cksprung aus dem Unterprogramm den Wert des AX Registers Wird er weggelassen ist der Wert zuf llig bzw abh ngig von der zuletzt ausgef hrten Anweisung Die R ckgabe eines Wertes funktioniert in gleicher Weise auch mit unbenannten Unterprogrammen die mit GOSUB aufgerufen werden Ausf hrlicher wird die Parameter bergabe in der Erg nzung zu Abschnitt 1 behandelt Beispiel integer a real bO a 2 b0 1 3 call display a bO stop subroutine display x YZ integer x real yz print x yz return subend end Argumente des Typs Integer werden als Wert Ubergeben Real Argumente per Referenz siehe hierzu die CALL Anweisung Abschnitt 2 3 14 Beispiel integer a real b0 a 12 bO 5 678 call test a b0 print a bO stop subroutine test x y0 nteger x eal y0 rint x y0 34 0 1 234 rint x y0 return subend end OX TO HR Das Ergebnis sollte wie folgt aussehen T2 5 678 34 1 234 12 1 234 Um eine Integer Variable
25. einer Zeichenkette Syntax LEN lt string gt Anmerkung Die Funktion verh lt sich wie die strlen Funktion in C d h sie z hlt die Zeichen vom Beginn der Zeichenkette bis zum ersten Auftreten eines Null Bytes das als Endekennzeichen interpretiert wird 13 Die FRE Funktion Die Funktion liefert die Gr e des String Bereiches nach ausgef hrter Garbage Collection Syntax FRE lt dummy variable name gt 53 Erganzung Die Funktion gibt zun chst nicht mehr ben tigte String Bereiche frei Garbage Collection und liefert als Ergebnis die verbleibende Anzahl freier Bytes im Datensegment 14 Die USR Funktion Die Funktion ruft ein in Maschinensprache geschriebenes Unterprogramm auf und gibt den Wert des AX Registers als Ergebnis zur ck Syntax USR lt memory address gt lt argument gt Argumente Register al AX 2 BX AX 3 CX BX AX 4 DX CX BX AX Erg nzung Die Funktion f hrt einen NEAR Aufruf des Unterprogramms aus wobei zuvor die Register wie oben angegeben mit den Werten der bergebenen Integer Argumente initialisiert werden Mit Ausnahme der Aufrufsyntax und der Verwendbarkeit als Rechtswert einer Zuweisung entspricht das Verhalten dem der USER Anweisung vgl 2 3 15 Beispiel integer adr goto start usrproc mov ax bx ret start mov ax usrproc adr print usr adr 2 1 user adr 2 1 print end 15 Benutz
26. haben und dieser Wert vom Typ Real ist Beispiel f r eine Funktion die ihr Argument mit 1000 multipliziert real a0 a0 2 0 print fn_sen a0 stop function sen yz real yz return yz 1000 0 fnend end Anmerkung Wird innerhalb einer Funktion ein Integer Wert als R ckgabewert angegeben so erfolgt eine automatische Konvertierung nach Real Erg nzung Die R ckgabe des Funktionswertes erfolgt ber die Register CX DX und AL Dabei werden die 5 Bytes des Real Wertes wie folgt auf die Halb Register abgebildet ByteO Bytel Byte2 Byte3 Byte4 CL CH DL DH AL 2 9 Sonstige Anweisungen 2 9 1 Die SWAP Anweisung Die Anweisung vertauscht variable1 und variable2 Syntax SWAP lt variablel gt lt variable2 gt Es gibt einige Einschr nkungen f r das Vertauschen beispielsweise dann wenn eine einfache Variable oder ein normales Array f r ein erweitertes Array platziert w rde 43 Erganzung Die etwas ungenaue Beschreibung von Einschrankungen im Original Handbuch lasst sich folgenderma en pr zisieren Streng genommen werden nicht Variablen sondern Variablenwerte vertauscht Daraus ergibt sich dass die als Argumente angegebenen Variablen vom selben Typ sein m ssen andernfalls erh lt man schon vom Compiler eine Fehlermeldung Gibt man Array Variablen als Argumente an unabh ngig davon ob mit DIM oder DIMX definierte so akzeptiert das der Compiler die SWAP Anweisung bleibt aber wirkun
27. string xor exclusive or The others cs code segment override prefix ds data segment override prefix es extra segment override prefix ss stack segment override prefix byte define byte word define word float floating point number even jeven directiv align align directive 4 16 256 blank relative org without initialize byte ptr byte pointer operator override word ptr word pointer operator override offset offset operator of address Erganzung Der Inline Assembler unterst tzt nicht alle gebr uchlichen Mnemonics Insbesondere fehlen ein paar allerdings redundante Befehle f r bedingte Sprunganweisungen sowie M glichkeiten zur Definition vom 32 Bit Werten und f r FAR Aufrufe JMP und CALL Hier muss man sich bei Bedarf zu Fu behelfen d h mit der byte Anweisung und handcodierter Maschinensprache 2 9 10 Konsolenkommandos Alle Anweisungen dieses Abschnitts setzen einen installierten ANSI SYS Treiber voraus 1 Die LOCATE Anweisung LOCATE erlaubt die freie Positionierung des Cursors auf dem Display Syntax LOCATE lt column gt lt line gt Beispiel locate x y wobei x die Spaltennummer 0 lt x lt 80 und y die Zeilennummer 0O lt y lt 25 ist 48 2 Die TXCLS Anweisung Die Anweisung l scht den gesamten Text der Anzeige Syntax TXCLS 3 Die BEEP Anweisung Die Anweisung gibt einen kurzen Piepton aus Syntax BEEP
28. unbenannten Unterprogramm Uber eine Zeilennummer oder ein Label Syntax GOSUB lt line number gt lt label gt lt subroutine name gt Beispiel gosub 100 Folgende Varianten sind ebenfalls zulassig gosub name gosub name Mit der GOSUB Anweisung lassen sich nur parameterlose Unterprogramme aufrufen F r den Aufruf mit Parameterubergabe muss die CALL Anweisung verwendet werden Achtung Der Compiler meldet keinen Fehler wenn man mit GOSUB zu einem gew hnlichen Label also keinem Unterprogramm springt allerdings kann dies zu einem Laufzeitfehler und damit zum kommentarlosen Programmabbruch f hren 2 3 8 Die RETURN Anweisung Mit der RETURN Anweisung wird ein Unterprogramm verlassen und zum Aufrufer zur ckgekehrt Syntax RETURN Die Anweisung wird am Ende oder innerhalb eines Unterprogramms notiert um das jeweilige Unterprogramm zu verlassen Beispiel lt procedure gt return Erg nzung Auch zum Verlassen benannter mit SUBROUTINE und SUBEND definierter Unterprogramme muss RETURN unbedingt verwendet werden Andernfalls wird die Routine nicht korrekt verlassen d h die Abarbeitung l uft bei der n chsten Anweisung hinter dem Unterprogramm weiter Im Unterschied zum Assemblerbefehl ret setzt die RETURN Anweisung den Stack Pointer auf den Wert des Registers BP und weist ggf den als Argument angegebenen R ckgabewert dem AxX Register zu siehe 2 7 25 2 3 9 Die ON
29. Beispiel asS XYZ poke dpeek loc a A ersetzt X in a durch A Zu Beginn der Abarbeitung eines String Ausdrucks repr sentiert die Pseudo Variable die Zeichenkette die durch das BX Register adressiert wird 2 2 Anweisungen und deren Syntax 2 2 1 Die Deklaration von Variablen 1 Die INTEGER Anweisung Die Anweisung dient der Deklaration von Integer Variablen Syntax integer lt variable name gt lt variable name gt Dabei ist variable name ein Bezeichner aus alphanumerischen Zeichen und dem Unterstrich _ der mit einem Buchstaben beginnt Beispiel integer cntr const dim centr 100 Bei der Deklaration k nnen Variablen auch unmittelbar initialisiert werden Syntax integer lt variable name gt lt constant gt lt variable name gt lt constant gt Dabei ist constant eine ganzzahlige numerische Konstante Beispiel integer cntr 12 const 25 2 Die REAL Anweisung Die Anweisung dient der Deklaration von Integer Variablen 12 Syntax real lt variable name gt lt variable name gt Dabei ist variable name ein Bezeichner aus alphanumerischen Zeichen und dem Unterstrich _ der mit einem Buchstaben beginnt Beispiel real xyz abc dim xyz 50 10 Bei der Deklaration k nnen Variablen auch unmittelbar initialisiert werden Syntax real lt variable name gt lt constant gt lt variable name gt lt constant gt Dabei ist constant eine ganzzahlige numerische K
30. Ergebnis des Integer Ausdrucks verbleibt im AX Register ohne dass eine Zuweisung erfolgt Eine genauere Darstellung mit Beispielen findet sich in Abschnitt 3 4 2 9 9 Der Inline Assembler TBC gestattet die inline Verwendung von Assembler Anweisungen Syntax mnemonic Beispiel mov ax bx add ax dx push ax Die folgende Form ist ebenfalls erlaubt mov ax bx add ax dx push ax Unterst tzte Assembler Anweisungen Mnemonic Action aaa ASCII adjust for add aad ASCII adjust for divide aam ASCII adjust for multiply aas ASCII adjust for subtract adc add with carry add add and logical and call call procedure cbw convert byte to word cle clear carry flag cld clear direction flag et clear interrupt enable flag cmc complement carry flag cmp compare cmpsb compare string byte cmpsw compare string word cwd convert word to double word 46 daa das dec div hlt idiv imul in inc H gt ct I pe pe oh BD D ct ct be mps hfe ISCH I II jen VA ee es EL L H oO N al N lock lodsb lodsw loop loopz loopnz mov movsb movsw mul neg nop not or out pop popf push pushf rcl rer rep rep repnz ret retf rol decimal adjust for addition decimal adjust for subtraction decrement divide halt integer divide signed integer multiply signed input from port increment interrupt interrupt on overflow interrupt return
31. Funktion f r pi 2 n pi nicht definiert ist l st die Funktion f r solche Argumente keinen Fehler aus was wohl auf Ungenauigkeiten bei der Rundung auf die interne Bin rdarstellung zur ckzuf hren ist So ergibt beispielsweise der Aufruf von print tan pi 2 atn tan pi 2 atn tan pi 2 180 pi die Ausgabe 2 7342611E 09 1 5707963 90 Interessanterweise f hrt der Aufruf von print sin pi 2 cos pi 0 5 sin pi 2 cos pi 2 atn sin pi 2 cos pi 2 180 pi dagegen zu 1 7 3145904E 10 1 3671306E 09 90 Der Anwendungsprogrammierer sollte sich also selost um das Abfangen solcher Situationen k mmern 10 Die ASN Funktion Die Funktion berechnet den Arkussinus des gegebenen Arguments und liefert ein Ergebnis im Bogenma Radiant zwischen pi 2 und pi 2 Syntax ASN lt real expression Der Wert des als Argument bergebenen Ausdrucks muss im Wertebereich von 1 bis 1 liegen andernfalls wird ein Fehlerzustand vom Typ Z vgl Fehler Referenz nicht gefunden erzeugt 57 11 Die ACS Funktion Die Funktion berechnet den Arkuskosinus des gegebenen Arguments und liefert ein Ergebnis im Bogenma Radiant zwischen 0 und pi Syntax ACS lt real expression gt Der Wert des als Argument Ubergebenen Ausdrucks muss im Wertebereich von 1 bis 1 liegen andernfalls wird ein Fehlerzustand vom Typ Z vgl Fehler Referenz nicht gefunden erzeugt 12 Die ATN Funktion Die Funktion berechne
32. GOTO Anweisung Die ON GOTO Anweisung verzweigt anhand des Ergebnisses eines Bedingungsausdrucks zur angegebenen Programmzeile die als Zeilennummer oder Label spezifiziert sein kann Syntax ON lt integer expression gt GOTO lt line numberl gt lt line number2 gt Ergibt der Ausdruck 1 so wird zur ersten Zeile bei 2 zur zweiten usw verzweigt fur andere Werte also solche fur die keine Zeile als Ziel angegeben wurde wird die Abarbeitung bei der folgenden Zeile fortgesetzt Beispiel input a on instr CDEP a goto calc display end prg print out 2 3 10 Die ON GOSUB Anweisung Die ON GOSUB Anweisung ruft anhand des Ergebnisses eines Bedingungsausdrucks das zugehorige Unterprogramm auf das Uber eine Zeilennummer ein Label oder den Unterprogrammnamen angegeben sein kann Nach der Ruckkehr aus dem Unterprogramm wird die Abarbeitung auf der Zeile fortgef hrt die auf die Zeile mit ON GOSUB folgt Entspricht der R ckgabe wert keiner der angegebenen Optionen so wird direkt zur Ausf hrung der n chsten Zeile bergegangen Syntax ON lt integer expression gt GOSUB lt line numberl gt lt line number2 gt Dabei wird beim Ergebnis 1 des Ausdrucks zum ersten Unterprogramm bei 2 zum zweiten usw verzweigt Wie nachfolgend gezeigt k nnen statt der Zeilennummern auch Labels oder Unterprogrammnamen verwendet werden Beispiel input a on instr CDEP a gosub calc display print out
33. NCTION Anweisung siehe 2 8 definierte benutzerdefinierte Funktion aufzurufen Syntax FN lt function name gt lt argument gt lt argument gt Dazu wird das Pr fix FN_ dem Namen der Funktion vorangestellt 59 20 Vordefinierte Real Konstanten PI hat den Wert 3 14159265 hat den Wert 2 71828183 also die Basis des Nat rlichen Logarithmus Anmerkung Erstaunlicherweise lasst der Compiler eine Zuweisung an diese Konstanten z B pi 3 ohne eine Fehlermeldung zu im erzeugten Code bleibt dies allerdings ohne Wirkung d h der Wert dieser Konstanten wird nicht tatsachlich geandert Offensichtlich wird bei der Zuweisung eine gleichnamige Variable angelegt auf die jedoch nicht lesend zugegriffen werden kann 21 Die FLOAT Funktion Die Funktion konvertiert das Ergebnis des als Argument Ubergebenen Integer Ausdrucks in einen Real Wert Syntax FLOAT lt integer expression gt 22 Die VAL Funktion Die Funktion wandelt eine Zeichenkette in einen Real Wert um Syntax VAL lt string gt Erganzung Die VAL Funktion interpretiert Zahlen in normaler und Expotentialdarstellung Ist die bergebene Zeichenkette nicht vollst ndig als Real Zahl interpretierbar so wird kein Fehler ausgel st sondern es werden vom Anfang beginnend so viele Zeichen interpretiert wie interpretierbar sind Beginnt die Zeichenkette dagegen mit einem f r Zahlen ung ltigen Zeichen
34. STEP von Standard BASIC verwendet werden Dies ist eine Sonderfunktion zur schnellen Ausf hrung von Integer Z hlschleifen Ansonsten verhalt sich die FOR NEXT Schleife wie die in Standard BASIC Beispiel Verwendung einer Variablen mit STEP step x additive Schleife mit Schrittweite x step Xx subtraktive Schleife mit Schrittweite x step x y subtraktive Schleife mit Schrittweite x y Hierbei werden f r x und x y positive Werte angenommen 2 3 2 Die WHILE WEND Anweisung Die WHILE WEND Anweisung f hrt eine Folge von Anweisungen so lange aus wie die hinter WHILE notierte Bedingung erf llt ist Syntax WHILE lt conditional expression gt lt statement gt lt statement gt WEND Beispiel Ausgabe der Zahlen von 0 bis 10 integer n n 0 while n lt 10 print n n n 1 wend end WHILE Schleifen k nnen bis zu einer Tiefe von 8 Ebenen verschachtelt werden 2 3 3 Die REPEAT UNTIL Anweisung Die REPEAT UNTIL Anweisung f hrt eine Folge von Anweisungen so lange aus bis die hinter UNTIL notierte Bedingung erf llt ist 20 Syntax REPEAT lt procedure gt UNTIL lt conditional expression gt Beispiel Ausgabe der Zahlen von 0 bis 10 integer n n 0 repeat print n n n 1 until n gt 10 end Der Inhalt einer REPEAT UNTIL Schleife wird immer mindestens einmal ausgef hrt Eine Verschachtelung ist bis zu 8 Ebenen m glich 2 3 4 Die IF THEN ELSE Anweisung
35. TBC TOKIWA BASIC Compiler Benutzerhandbuch Deutsche Ubersetzung R Erik Ebert Berlin Dezember 2012 Die deutsche Ubersetzung basiert auf der von Dr Genji OKADA besorgten englischen Ubersetzung des Originals Inhalt 3 12 2 Datenypen ee 2 1 4 Arithmetische Aus r cke Einleitung Der Compiler TBC basiert auf der Programmiersprache BASIC Beginner s All purpose Symbolic Instruction Code Zus tzlich zu den traditionellen BASIC Anweisungen unterscheidet er zwischen Operationen f r Integer und Real Typen und erlaubt Unterprogramme bzw Funktionen mit Argumenten Au erdem wird eine vereinfachte Programmierung ohne die Verwendung von Zeilennummern unterst tzt Anstatt des blichen Gleitpunktformats einfacher Genauigkeit wird ein 5 Byte Format mit einer Genauigkeit von 9 5 Stellen der Mantisse verwendet Die Direkt bersetzung der Quelltexte in ausf hrbaren Maschinencode bewirkt eine schnelle Programmausf hrung TBC ist Freeware Gegen ber dem kommerziellen Produkt TKW 86BC fehlen einige Funktionen wie z B das Linken von Objektdateien Dennoch verf gt TBC ber gen gend M glichkeiten um den Umgang mit dem Computer und einem Compiler kennenzulernen 1 Grundlagen Der TBC Compiler basiert auf Standard BASIC Dieser Abschnitt gibt eine bersicht und Einf hrung anhand praktischer Beispiele 1 1 Programmieren und bersetzen mit TBC bersetzen und starten Sie zun chst ein Beispielprogramm Sie k nnen sich
36. als Zeichenkette zur ck Syntax INKEYS Beispiel 10 if inkey then 10 Hinweis Mehrfachzuweisungen wie a a inkey l sen eine Garbage Collection aus Erganzung INKEY liest ein einzelnes Zeichen ohne Bildschirmecho von der Tastatur wobei nicht auf eine Eingabe gewartet wird Ist zum Zeitpunkt des Aufrufs keine Taste gedruckt bzw steht kein Zeichen im Tastaturpuffer so ist das Ergebnis eine leere Zeichenkette Intern wird f r INKEY die DOS Funktion 06H Direct console I O mit DL FFH Zeicheneingabe verwendet 3 Fortgeschrittene Programmierung 3 1 Compiler Optionen A gt TBC C file name lt cr gt bzw A gt TBC file name C lt cr gt Kommandozeilenoptionen werden wie im Beispiel oben also am Anfang oder am Ende der Parameterliste beim Aufruf des Compilers notiert Alternativ ist es m glich die Optionen in der ersten Zeile des zu Ubersetzenden Quelltextes in der Form options c a zu notieren Folgende Optionen k nnen angegeben werden Anmerkung Die Wirkung einiger der nachfolgenden Optionen lie sich nicht genau bestimmen bzw berpr fen F r diese Optionen wurde lediglich die Beschreibung aus der Originaldokumentation bersetzt Nicht weiter berpr fte Optionen sind mit am Ende des Beschreibungstextes gekennzeichnet 1 Option A Die Option erzwingt die explizite Deklaration aller numerischen Variablen als integer oder real 63 2 Option V
37. amen keine Erweiterung angegeben so wird LIB angenommen Alle Quellcode Bibliotheken m ssen mit der END Anweisung siehe 2 2 8 abgeschlossen werden Weitere Anweisungen hinter der MERGE Anweisung in derselben Zeile sind nicht zul ssig Die MERGE Anweisung darf auch nicht innerhalb von Quellcode Bibliotheken verwendet werden Beispiel Die Bibliothek TEST LIB hat folgenden Inhalt print a end Hauptprogramm das TEST LIB verwendet a 123 merge TEST end Das quivalente Programm das was der Compiler bersetzt w re folgendes a 123 print a end 2 3 Steueranweisungen 2 3 1 Die FOR NEXT Anweisung Die FOR NEXT Anweisung f hrt eine Folge von Anweisungen mit einer festgelegten Anzahl von Wiederholungen aus Syntax FOR lt control variable gt lt initial gt TO lt ending gt STEP lt increment gt lt statement gt lt statement gt NEXT lt control variable gt FOR NEXT Schleifen k nnen bis zu einer Tiefe von 15 Ebenen verschachtelt werden Beispiel Die Ausgabe der Zahlen von 0 bis 9 wird zehnmal wiederholt integer j k for j 1 to 10 print for k 0 to 9 print k next k next j end 19 Beispiel R ckw rts Z hlschleife von 10 bis 10 mit einer Schrittweite von 1 integer n for n 10 to 10 step 1 print n next n end Anmerkung Das Schlusselwort STEP kann fur die Ruckwartszahlung analog zu DOWN TO in Pascal im Gegensatz zum einfachen inkrementierenden
38. ateiname kann eine vollst ndig qualifizierte oder relative Pfadangabe enthalten Ist keine Dateiendung angegeben so wird als Standard die Erweiterung DAT angenommen Wird hinter dem Ger teindex ein A anf gt so werden die ausgegebenen Daten an eine vorhandene Datei angeh ngt andernfalls wird der Inhalt berschrieben Existiert die Datei noch nicht wird sie automatisch angelegt 39 2 6 4 Die Anweisungen CLOSE und CLOSE 2 CLOSE 4 1 CLOSE Die Anweisung schlie t eine Datei die zuvor mit der OPEN Anweisung zum Lesen mit READ ge ffnet wurde Syntax CLOSE Eine Datei wird beim Lesen mit READ automatisch geschlossen wenn das Dateiende EOF erreicht wurde In diesem Fall ist der anschlie ende Aufruf von CLOSE nicht erforderlich 2 CLOSE 2 CLOSE 4 Die Anweisungen schlie en eine Datei die zuvor mit der OPEN 2 OPEN 4 Anweisung zur Datenausgabe mit PRINT 2 PRINT 4 ge ffnet wurde Syntax CLOSE 2 CLOSE 3 CLOSE 4 2 7 Die SUBROUTINE Anweisung Die Anweisung SUBROUTINE kennzeichnet den Beginn eines benannten Unterprogramms und registriert dessen Namen Syntax SUBROUTINE lt name gt lt parameter gt lt parameter gt lt procedure gt RETURN lt integer expression gt SUBEND Der Name eines Unterprogramms besteht aus alphanumerischen Zeichen sowie dem Unterstrich _ wobei das erste Zeichen ein Buchstabe sein muss Die Maximall nge des Namens
39. bereiche wechselseitig berschreiben k nnen 6 Option J Mit dieser Option wird die Generierung von JMP Befehlen zum berspringen von mit SUBROUTINE oder FUNCTION deklarierten benutzerdefinierten Unterprogrammen unterdr ckt Erg nzung Benutzerdefinierte Unterprogramme und Funktionen k nnen im Prinzip irgendwo innerhalb des Quelltextes stehen und werden vom Compiler nicht selbstst ndig an ausgezeichneten Stellen zusammengefasst Deshalb wird normalerweise vor jeder dieser Routinen eine Sprunganweisung hinter ihr Ende eingef gt um den Ablauf des eigentlichen Programms nicht zu st ren Fasst man alle benutzerdefinierten Routinen am Anfang oder Ende des Quelltextes zusammen l sst sich mit der Option J die Gr e des erzeugten Programms etwas reduzieren In diesem Fall ist der Programmierer dann selbst daf r zust ndig den entsprechenden Bereich mit einer GOTO Anweisung zu berspringen 7 Option U Mit dieser Option wird der Stringpuffer nach der Verarbeitung von Zeichenketten erneuert 8 Option E Die Option gibt Fehlermeldungen in eine Datei BC ERR aus Erg nzung Die Datei BC ERR wird im selben Verzeichnis wie die Quelldatei angelegt und beinhaltet eine Kopie vom Compiler sonst nur auf die Konsole ausgegebenen Fehlermeldungen w hrend des bersetzungsvorganges Die Option hat keinen Einfluss auf die Ausgabe der Meldungen von Laufzeitfehlern sie landen immer auf der Konsole
40. den Inhalt des Programms am Bildschirm mit Hilfe des t ype Befehls anzeigen lassen C BAS gt type test bas lt cr gt Dabei ist C BAS gt ein MS DOS Prompt und lt cr gt bedeutet das Dr cken der ENTER Taste Der Dateiinhalt sollte etwa so aussehen Sample Program for n 0 to 10 print n next n end Nun bersetzen kompilieren wir die Datei C BAS gt tbc test lt cr gt Nach dieser Eingabe sollte folgende Ausschrift am Bildschirm erscheinen TOKIWA 8086 BASIC Compiler Ver 5 55 Sample Copyright C 1985 2000 by Genji OKADA Complete amp Saved Wenn die Ubersetzung der Quelldatei erfolgreich verlaufen ist existiert nun eine ausf hrbare Datei TEST EXE berpr fen Sie dies mit dem DIR Befehl Nun starten Sie das Programm indem Sie auf der Kommandozeile einfach C BAS gt test lt cr gt eingeben Das Ergebnis sollte wie folgt aussehen 0 1 2 3 4 56 7 8 9 10 Alle Mitteilungen und Ergebnisse werden am Textbildschirm der Konsole ausgegeben Wie an diesem Beispiel gezeigt k nnen Sie sehr einfach Programme kompilieren und ausf hren Weitere Beispielprogramme werden weiter unten vorgestellt 1 2 Erstellen von Programmen Zum Erstellen eines Programms wird ein Texteditor ben tigt Der Einfachheit halber wollen wir annehmen wir h tten einen Texteditor mit dem Namen TED Er wird durch Eingabe des folgenden Befehls gestartet C BAS gt ted testl bas lt cr gt Nun tippen Sie i
41. e Ausdr cke bestehen aus Konstanten bzw Variablen die durch Operatoren miteinender kombiniert werden Der TBC Compiler unterscheidet dabei strikt zwischen Ausdr cken vom Typ Integer und Real Beispiele integer i j k Integer Definitionen real x y z Real Definitionen optional k i j lt Integer Ausdruck Z X y Real Ausdruck Es sind die arithmetischen Operatoren power x hoch y und mod Modulus sowie die logischen Operatoren or xor und and definiert Beispiele integer i j k k i 3 k i 3 k 1 mod j k 1 and j Au erdem gibt es sechs relationale Operatoren gt gt lt lt lt gt Beispiel if i gt j then k 1 else k 0 2 1 5 String Ausdrucke String Ausdr cke bestehen aus String Konstanten String Variablen und String Funktionen die durch den Additionsoperator miteinander verkettet sind Beispiele aS abcde bS left a 3 xyz Erg nzung Auch die relationalen Operatoren gt gt lt lt lt gt lassen sich mit Strings verwenden Dies erm glicht in sehr einfacher Weise Zeichenkettenvergleiche Verglichen wird dabei zeichenweise nach ASCII Code d h unter Ber cksichtigung der Gro und Kleinschreibung 2 1 6 Zuweisungsanweisungen Der berechnete Wert auf der rechten Seite des Gleichheitszeichens das als Zuweisungsoperator dient wird der Variablen auf der linken Seite zugewiesen Syntax EBNF lt variable gt
42. e Felder unterst tzt Beispiel integer b real y0 15 dimx b 30000 y0 200 200 Mit der DIMX Anweisung deklarierte Felder werden im Extrasegment oberhalb des Stack Segments angelegt Es ist zu beachten dass die Elemente von mit DIM angelegten Feldern mit 0 initialisiert werden wahrend mit DIMX angelegte Felder nicht initialisiert werden 2 2 4 Die DEFINT Anweisung Die Anweisung erlaubt die Deklaration einer Gruppe von Integer Variablen anhand des ersten Buchstabens des Variablennamens Syntax DEFINT lt top character of variables gt lt top character gt Beispiel defint i n t Hier wird festgelegt dass fur alle Variablen deren Namen mit den Buchstaben i bis n in alphabetischer Ordnung oder t beginnen implizit der Typ Integer angenommen wird So wurden z B die Variablen jack und king als einfache bzw Feldvariablen vom Typ Integer interpretiert werden Hinweis Die mit DEFINT getroffene Typfestlegung ist schw cher als explizite Typdeklarationen siehe 2 2 1 das bedeutet explizit deklarierte Datentypen gewinnen im Fall von Konflikten 2 2 5 Die BREAK Anweisung BREAK Anweisung dient dem Verlassen des Anweisungsblocks von SWITCH CASE FOR NEXT WHILE WEND und REPEAT UNTIL Anweisungen vgl Abschnitt 2 3 Syntax BREAK Beispiel integer n for n 0 to 10 if n 5 then break print n next n end Als Ergebnis sollte folgende Zahlenfolge ausgegeben werden
43. egmentangabe lies Uber FAR Zeiger gelten die gleichen Regeln wie in Abschnitt 2 9 5 fur POKE beschrieben 6 Die DPEEK Funktion Die Funktion liest ein Wort 2 bytes von der angegebenen Speicheradresse Syntax DPEEK lt integer variable gt lt integer expression gt Mit Ausnahme der Breite der gelesenen Daten verh lt sich DPEEK wie die PEEK Funktion 51 7 Die POS Funktion Die Funktion gibt die Spaltenposition des Cursors zur ck Syntax POS lt integer expression gt Mit dem Integer Wert wird die Indexnummer festgelegt verwenden Sie POS ohne Indexnummer innerhalb der PRINT Anweisung Anmerkung Die wirkliche Bedeutung der Indexnummer lie sich nicht ergr nden M glicherweise handelt es sich dabei um den Index der Bildschirmseite auf die sich die Anweisung bezieht Offensichtlich liefern jedenfalls die Aufrufe POS 0 und POS identische Ergebnisse 8 Die LOC Funktion Die Funktion liefert die Speicheradresse der angegebenen Variablen Syntax LOC lt variable gt Ein Spezialfall ist dabei die bergabe eines erweiterten mit DIMX definierten Arrays ohne Indexangabe als Argument In diesem Fall liefert die Funktion die Position der Segmentadresse des Arrays also des Wertes der dem Extrasegment vor dem Zugriff zugewiesen werden muss Beispiel zur Bestimmung der Segmentadresse eines erweiterten Arrays dpeek loc exarray Anmerkung
44. einem Buchstaben beginnen Die Deklaration selbst wird mit dem Schl sselwort integer oder defint eingeleitet Die L nge eines Variablennamens ist auf 20 Zeichen begrenzt Beispiele integer a king zebra defint i n Real Variablen Analog zu den Integer Variablen werden Namen aus alphanumerischen Zeichen sowie dem Unterstrich _ gebildet und m ssen mit einem Buchstaben beginnen Eine explizite Deklaration des Typs ist nicht erforderlich jedoch mit Hilfe des Schl sselwortes real m glich Beispiele a a0 abcdef abc56 real epsilon String Variablen String Variablen werden durch Bezeichner aus alphanumerischen Zeichen sowie dem Unterstrich _ die mit einem Dollar Symbol abgeschlossen sind oder mit Hilfe des Schl sselwortes character deklariert Beispiele aS a0 abcdef abc56 character myString Array Variablen Felder Array Variablen werden durch einen Bezeichner f r eine Integer Real oder String Variable gefolgt von einer Gr enangabe gebildet Die Deklaration erfolgt mit Hilfe des Schl sselwortes dim Beispiele integer cntr dim cntr 100 lt Deklaration eines Integer Arrays von 100 Elementen entr 1 Zugriff auf das Feldelement mit Index 1 Hinweis Bei Variablennamen wird nicht zwischen Gro und Kleinschreibung unterschieden So verweisen beispielsweise die Bezeichner abcdef ABCDEF and Abcdef auf ein und dieselbe Variable 2 1 4 Arithmetische Ausdr ck
45. elative Adressen umgewandelt 4 WORD Definition word 1000 200 TEST Hierbei werden 200 und test in absolute Adressen innerhalb des Codesegments umgewandelt 5 BLANK Definition blank 10 Mit dieser Anweisung werden 10 Bytes innerhalb des Codesegments reserviert 6 Sonstiges Definition von Segmenten als Prafix cs mov di ax oder cs mov ax di Definition von Anweisungswiederholungen rep stosb oder rep movsb rep movsw Offset Definitionen als Index mov ax bx 100 2 3 2 AB const mov al bx tsi 100 16 5 mov bx offset ary 0 3 70 Dabei sind nur einfache Operationen erlaubt 3 6 Assembler und die PRINT Anweisung Ergebnisse die in Assembler Abschnitten berechnet wurden k nnen leicht mit Hilfe des Symbols das den Inhalt des AX Registers repr sentiert an die PRINT Anweisung bergeben werden Beispiel mov ax 7 shl ax l print Das Ergebnis sollte 14 sein 7 um ein Bit nach links verschoben Beispiel zur Ausgabe der Adresse des Datensegments mov ax ds print 4h 3 7 Beispielprogramme 1 Beiliegende Programmquellen LNEQ BAS dient der L sung linearer Gleichungssysteme Verwenden Sie zun chst die Beispieldaten in der Datei MATRIX DAT Probieren Sie dann folgende Gleichungen aus 5 7 x 2y 3x 4y Die Daten f r diese Gleichungen sind 2 1 2 5 3 4 7 wobei die erste Zahl die Anzahl der unabhangigen Gleichungen ang
46. en real Konstanten sind dagegen nicht zul ssig Variante 2 gestattet als Selektionskonstanten keine Ausdr cke e Der DEFAULT Zweig muss stets als letzter Zweig des Konstrukts notiert werden e Das SWITCH CASE Konstrukt hat einen fall through Mechanismus Das bedeutet dass jeder Zweig mit Ausnahme des letzten normalerweise mit einer BREAK Anweisung abgeschlossen werden muss Andernfalls f llt die Abarbeitung auf den n chsten Zweig durch d h dessen Anweisungen werden ebenfalls ausgef hrt 2 3 6 Die GOTO Anweisung Die GOTO Anweisung verzweigt zu einer Zeilennummer oder einem Label Syntax GOTO lt line number gt lt label gt Dabei unterscheidet sich die Bedeutung der Zeilennummer von der in traditionellem BASIC Sie hat hier lediglich die Funktion einer Markierung auf die verwiesen werden kann Zeilennummern sind innerhalb des Hauptprogramms sowie einzelner Unterprogramme bzw Funktionen jeweils voneinander unabh ngig Deshalb kann auf Zeilennummern innerhalb eines Unterprogramms nicht aus dem Hauptprogramm verwiesen werden und umgekehrt Folgende Formate sind ebenfalls zul ssig goto name goto name Achtung Der Compiler meldet keinen Fehler wenn man mit GOTO zu einem Unterprogramm springt allerdings f hrt dies zur Laufzeit zu einem kommentarlosen Programmabbruch 24 2 3 7 Die GOSUB Anweisung Die GOSUB Anweisung verzweigt zu einem benannten Unterprogramm uber dessen Namen oder einem
47. erdefinierter CALL_name Funktionsaufruf Dieses Konstrukt erm glicht es ein mit der SUBROUTINE Anweisung siehe 2 7 definiertes Unterprogramm wie eine Funktion aufzurufen d h seinen Ruckgabewert Typ Integer als Rechtswert einer Zuweisung zu verwenden Syntax CALL lt subroutine name gt lt argument gt lt argument gt Dazu wird das Prafix CALL_ dem Namen des Unterprogramms vorangestellt 54 Beispiel x call name y stop subroutine name y integer y lt procedure gt return yt3 subend Der Ausdruck hinter RETURN wird als Integer ausgewertet 2 10 2 Real Funktionen Diese Funktionen sind nur in Real Ausdr cken verwendbar 1 Die ABS Funktion Die Funktion liefert den Absolotbetrag eines real Ausdrucks Syntax ABS lt real expression 2 Die SGN Funktion Die Funktion liefert den Vorzeichenwert des Ausdrucks Syntax SGN lt real expression gt Der R ckgabewert ist 1 f r positive Werte O for Null und 1 f r negative Werte Anmerkung Obwohl der R ckgabewert nur die Werte 1 0 und 1 annehmen kann ist er von Typ Real 3 Die RND Funktion Die Funktion liefert eine Pseudo Zufallszahl zwischen 0 und 1 Syntax RND lt dummy variable name gt Anmerkung Um nicht immer dieselbe Folge von Zufallszahlen zu erhalten sollte der Zufallszahlengenerator mit der RANDOMIZE Anweisung vgl 2 9 6 initialisiert werden 55 4 Die
48. etr gt standardm ig 255 Zeichen In den Feldelementen selbst wird die Adresse Zeiger des ersten Zeichens der jeweiligen Zeichenkette abgelegt Mit der DIM Anweisung deklarierte Felder werden im Datensegment angelegt Sie teilen sich damit den auf 64 KBytes begrenzten Speicherplatz mit den einfachen Variablen und Puffern Um Speicherplatz zu sparen werden Arrays immer als globale Variablen angelegt Erg nzungen Die zuvor deklarierten einfachen Variablen mit den Feldern entsprechenden Namen k nnen unabh ngig von den Feldern weiter als einfache Variablen gebraucht werden F r die Definition von Real Feldern ist die vorherige Definition einer gleichnamigen einfachen Variablen nicht erforderlich Einer Variablen wird vom Compiler nur dann Speicherplatz zugewiesen wenn sie tats chlich verwendet d h initialisiert wird Deshalb spart man keinen Speicherplatz wenn man die Deklaration einer einfachen Real Variablen als Vorlage f r ein Feld wegl sst Die deklarierte Gr e eines Feldes wird nicht im Programm abgelegt Das bedeutet dass es keine definierte M glichkeit gibt zur Laufzeit die Gr e eines Feldes zu bestimmen 2 Die DIMX Anweisung Die DIMX Anweisung dient der Deklaration von erweiterten Datenfeldern extended Arrays mit ihrem Namen und der zugeh rigen Feldgr e Syntax DIMX lt array name gt lt maximum of index gt lt maximum of index gt Es werden ein und zweidimensionale erweitert
49. folgenden Anweisung fortgesetzt also anders als in anderen BASIC Dialekten nicht hinter der Anweisung die den Fehler ausgel st hat Beispiel real inpvar subroutine inputerr input Invalid Input please repeat inpvar return subend goto start defaulthandler print Error program aborted stop start on error goto defaulthandler any code here input Type a number on error gosub inputerr result sqr inpvar print Square Root of number is on error goto defaulthandler any code here end inpvar Ti result 2 3 12 Die ON EOF GOTO GOSUB Anweisung Die Anweisung legt fest dass beim Erreichen des Dateiendes bei einer Leseoperation zur durch Zeilennummer bzw Label spezifizierten Zeile verzweigt GOTO oder ein Unterprogramm aufgerufen wird GOSUB Die Datei wird dabei automatisch geschlossen 28 Syntax ON EOF GOTO lt line number gt lt label gt ON EOF GOSUB lt line number gt lt subroutine gt Die mit der Anweisung festgelegte Zuordnung bleibt bis zur erneuten Definition einer solchen Zuordnung erhalten Erganzung Das grunds tzliche Verhalten der Anweisung entspricht der ON ERROR Anweisung 2 3 11 Der Unterschied besteht lediglich darin dass hier nicht bei einem Fehler sondern beim Erreichen des Dateiendes verzweigt wird 2 3 13 Die ON KEY GOTO GOSUB Anweisung Die Anweisung verzweigt zur angegebenen Programmzeile GOTO oder ruft das an
50. g Index ziel 0 Ausgabe auf die Konsole T Ausgabe auf den Standarddrucker 2 4 Ausgabe in Dateien 5 Serielle Ausgabe RS 232C AUX 35 Beispiel Druckerausgabe print 1 test print line out lt 1 bleibt als Ausgabeziel erhalten end Hinweis Die Ausgaben der Eingabeaufforderung einer INPUT Anweisung sowie von Fehlermeldungen sind unabhangig von dieser Festlegung Sie werden immer auf die Konsole ausgegeben 3 Formatsteuerung Mit dem Kommando l sst sich das Format der Ausgebe steuern Syntax PRINT lt format gt lt expression gt lt expression gt Es sind folgende Formatangaben m glich n m Gleitpunktausgabe mit m Dezimalstellen m lt 10 und einer gesamten Feldbreite einschlie lich Vorzeichen und ggf Leerzeichen von n Stellen Reicht die angegebene Stellenzahl nicht aus wird automatisch zur E Form der Ausgabe gewechselt nEm Gleitpunktausgabe in Expotentialdarstellung E Form mit m Stellen der Mantisse m lt 10 und einer Gesamtbreite von n nl Ausgabe als Integer Wert mit n Stellen l Unformatierte linksbUndige Ausgabe als Integer Wert nH Hexadezimalausgabe eines Integerwertes mit folgender Darstellung in Abh ngigkeit von n n gt 4 amp ABCD n 4 ABCD n 3 CD n 2 CD nX Ausgabe von n Leerzeichen 0 Unformatierte linksb ndige Ausgabe als Real Wert Dies ist die initiale Standardeinstellung der PRINT Anweisung
51. gabeaufforderung verh lt sich wie bei der einfachen INPUT Anweisung 2 4 1 Die Eingabe endet mit einem Zeilenumbruch und kann beliebige druckbare Zeichen enthalten Grunds tzlich kann die zur Eingabe verwendete Variable auch numerischen Typs sein Dies f hrt allerdings zu einem Fehler falls die eingegebene Zeichenfolge nicht als Zahl interpretierbar ist oder au erhalb des m glichen Wertebereichs der Variablen liegt 2 4 3 Die READ Anweisung Die READ Anweisung liest Daten au seiner zuvor ge ffneten Datei und weist sie nacheinander den angegebenen Variablen zu Syntax READ lt variable gt lt variable gt Die Zielvariablen der Zuweisung k nnen vom Integer Real oder String Typ sein Die Standard Dateierweiterung ist DAT beachten Sie bitte den Unterschied zwischen der READ Anweisung und der DATA Anweisung in traditionellem BASIC Beispiel Lesen einer Datei vgl hierzu das Beispielprogramm LNEQ BAS 32 Datei DTEST DAT Test data 1 2 345 Programm open DTEST read a b c0O print a print b cO end Tabulatoren und Leerzeichen am Beginn einer Zeichenkette werden innerhalb der Datendatei ignoriert Wird die Zeichenkette in Anf hrungszeichen eingeschlossen so geh ren alle dazwischen stehenden Zeichen zur Zeichenkette Die einzelnen Werte k nnen durch Tabulatoren Leezeichen oder Kommata voneinander getrennt werden wobei bei Zeichenketten nur das Komma ein Trennzeichen ist sofern
52. gegebene Unterprogramm auf GOSUB wenn zum Zeitpunkt der Abarbeitung eine Taste gedr ckt ist Das Ziel der Verzweigung kann als Zeilennummer oder Label spezifiziert sein Bei Verwendung von GOSUB ist als Ziel auch der Name eines benannten Unterprogramms siehe Abschnitt 2 7 zul ssig Syntax ON KEY GOTO lt line number gt or lt label gt ON KEY GOSUB lt line number gt or lt label gt Bei jeder Ausf hrung dieser Anweisung wird der Status der Konsole Standard Eingabe berpr ft Erg nzung Nach der R ckkehr aus einem mit ON KEY GOSUB aufgerufenen Unterprogramm wird die Abarbeitung bei der auf die ON KEY Anweisung folgenden Anweisung fortgesetzt Dies erlaubt beispielsweise eine zyklische Abfrage der Tastatur ohne dass dabei der Programmablauf unterbrochen wird Beispiel subroutine inputchr c inkey print return subend es m while c lt gt q on key gosub inputchr wend print end 29 2 3 14 Die CALL Anweisung Die Anweisung ruft das angegebene benannte Unterprogramm auf und fuhrt es aus Syntax CALL lt subroutine name gt lt argument gt lt argument gt Dabei k nnen im Unterschied zur GOSUB Anweisung vgl 2 3 7 zus tzliche Argumente angegeben werden wobei diese Argumente in Anzahl und Typ und Reihenfolge genau mit den im aufgerufenen Unterprogramm definierten Parametern bereinstimmen m ssen siehe Abschnitt 2 7 Beispiel integer x y real x0
53. gische Operationen im Bedingungsausdruck wie in der folgenden Anweisung werden nicht unterst tzt if a gt b and c gt d then x atc Die Anweisung sollte wie folgt modifiziert werden if a gt b then if c gt d then x atc Hinweise Der Originaltext ist hier an einigen Stellen etwas missverst ndlich deshalb noch ein paar Pr zisierungen e Die Begrenzung Codegr e f r die Variante nach Syntax 1 meint offenbar dass bei dieser Notation bedingte Sprungbefehle mit 8 Bit Offset generiert werden Somit bezieht sich die Begrenzung auf die L nge des generierten Maschinencodes f r einen Anweisungsteil Die erweiterte Form Syntax 2 verwendet dagegen JMP Befehle mit NEAR Offset hier k nnte ein Anweisungsteil also theoretisch bis zu 32 KB lang sein e Die fehlende Unterst tzung f r logische Ausdr cke in der Bedingung gilt auch f r die erweiterte Form e Genau genommen k nnen in beiden Notationsformen Anweisungsfolgen in den Anweisungsteilen hinter THEN bzw ELSE stehen e Beide Notationsformen k nnen auch gemischt werden z B IF a l gt b THEN if c gt d THEN x a atc ENDIF bzw IF a 1 gt b THEN if c gt d THEN x atc ELSE x a c ENDIF 22 2 3 5 Die SWITCH CASE BREAK DEFAULT SWEND Anweisung Die Anweisung dient der Flusssteuerung mittels Fallunterscheidung Hinter dem Schl sselwort SWITCH wird ein Ausdruck vom integer oder string Typ notiert anhand von dessen Ergebnis ansc
54. gslos Dagegen ist es problemlos m glich die Werte von Feldelementen mit SWAP zu vertauschen wieder gleiche Typen vorausgesetzt 2 9 2 Die WAIT Anweisung Die WAIT Anweisung h lt die Programmabarbeitung an bis die am festgelegten Port gelesenen Daten dem angegebenen Bedingungsausdruck gen gen d h der gelesene Wert dem des Ausdrucks entspricht Syntax WAIT lt port index gt lt integer expression gt Beispiel wait amp 12 amp 80 Folgende Assembler Routine entspricht obiger Anweisung loop0 in al l2h and al 80h JZ loopO 2 9 3 Die OUT Anweisung Die Anweisung schreibt ein Byte 8 Bits in den angegebenen Port Syntax OUT lt port index gt lt integer expression gt 2 9 4 Die DOUT Anweisung Die Anweisung schreibt ein 16 Bit Wort in den angegebenen Port Syntax DOUT lt port index gt lt integer expression gt 44 2 9 5 Die POKE Anweisung Die Anweisung schreibt ein Byte 8 Bits an die angegebene Speicheradresse Syntax POKE lt integer variable gt lt memory address gt lt integer expression gt Beispiel fur das Schreiben ins Datensegment poke amp a000 3 Beispiel fur die Verwendung des Extrasegments x amp a000 eseg Adresse poke x address data zeigt in eseg Wenn der Wert des Extrasegments bereits gesetzt wurde kann die verk rzte Form poke address data verwendet werden Anmerkung In der Standardform erste Variante wird d
55. h unterdr cken indem man statt des Semikolons hinter der Zeichenkette ein Komma 31 notiert Die Werte werden wahlweise durch Komma oder Leerzeichen getrennt auf der Konsole eingegeben Der Abschluss der Eingabe erfolgt mit einem Zeilenumbruch Enter Taste Die Eingabe von Zeichenketten wird folgenderma en notiert 10 input a b print aS b goto 10 end In diesem Beispiel sollte fur eine Eingabe a b c d die Ausgabe a bc d erscheinen w hrend die Eingabe a b c d die Ausgabe a bc d ergibt Erg nzung Auch bei der Eingabe von Zeichenketten kann bei Bedarf eine Eingabeaufforderung vorangestellt werden Werden die eingegebenen Zeichenketten in Anf hrungszeichen eingeschlossen so sind das Leerzeichen und das Komma wie bei numerischen Eingaben Trennzeichen Fehlen die Anf hrungszeichen so gilt nur das Komma als Trennzeichen w hrend Leerzeichen mit zur eingegebenen Zeichenkette geh ren Soll eine Zeichenkette ein Komma enthalten so muss sie in Anf hrungszeichen eingeschlossen werden Ein Anf hrungszeichen innerhalb einer Zeichenkette wird durch die aufeinanderfolgende Notation zweier Anf hrungszeichen erreicht wobei die gesamte Zeichenkette nochmals in Anf hrungszeichen einzuschlie en ist 2 4 2 Die LINE INPUT Anweisung Die Anweisung weist eine vollst ndige Eingabezeile einer Variablen zu Syntax LINE INPUT lt message gt lt string variable gt Erg nzung Die optionale Ein
56. hlie end die Fallunterscheidung Konstante hinter dem Schl sselwort CASE vorgenommen d h die auf die Zeile mit CASE folgende Anweisungsfolge bis zur abschlie enden BREAK Anweisung ausgef hrt wird Zus tzlich kann ein DEFAULT Zweig ohne nachfolgenden Selektionswert existieren dessen Inhalt abgearbeitet wird falls keiner der explizit angegebenen F lle zutreffend ist Syntax 1 integer Ausdruck SWITCH lt integer expression gt CASE lt constant gt lt procedure gt BREAK CASE lt constant gt lt procedure gt BREAK DEFAULT lt procedure gt BREAK SWEND Beispiel switch asc a case A print by A break case A l print by B break default print others break swend Syntax 2 string Ausdruck SWITCH lt string expression gt CASE lt string gt lt procedure gt BREAK CASE lt string gt lt procedure gt BREAK DEFAULT lt procedure gt BREAK SWEND Beispiel 23 switch a case abc print by abc break case def print by def break default print others break swend SWITCH Anweisungen k nnen bis zu einer Tiefe von 5 Ebenen verschachtelt werden Erg nzungen e Inder Variante 1 kann auch ein Bedingungsausdruck angegeben werden der einen Real Wert ergibt Dieser Wert wird implizit in einen Integer Wert umgewandelt F r die Selektionskonstanten k nnen auch konstante Integer Ausdr cke steh
57. ibt HANOI BAS das Problem der T rme von Hanoi Dies ist ein Beispiel fur rekursive Aufrufe hnlich denen in PASCAL ENVIRON BAS ist ein Beispiel f r den Zugriff auf Kommandozeilen Parameter und Environment Variablen TCALC BAS schlie lich ist ein Beispiel f r einen Rechner nach der Methode der Umgekehrten Polnischen Notation 2 Ein ausf hrbares Grafikprogramm PC AT und Kompatible MANDELB EXE 71 Dieses Programm zeichnet die Mandelbrot Menge auf den Bildschirm Um es Ubersetzen zu k nnen ist die p_set Funktion aus der Bibliothek VGAGRAPH LIB erforderlich merge vgagraph lib defint i n rl 2 r2 5 hl 1 25 h2 1 25 p r2 rl 399 q h2 hl 399 0 to 399 X pot rt 20 k 0 0 3 99 qs a me ll u Rw Il K ll x for 0 to 40 XX X X yyY y Y xy x y y xy xy d x xx C yy if xx yy gt 4 then call p set n j i mod 7 1 break next 1 next j next k j d c i 3 8 Fehlermeldungen des Compilers Array over Endif error Illegal end Label over Miss match Nest error Nest over No File Phase error Prog over Step error Sub or Fnend error Swend error Sub amp Fn over SW Syntax error Var over WR error Array Var Label Sub amp Fn double declaration of variable unassigned string variable format error missing parenthesis 72
58. ie Anweisung schreibt Bin rdaten aus den angegebenen Arrays in eine vorher ge ffnete Datei Syntax WRITE lt array gt lt array gt Nach Abschluss des Schreibvorgangs wird die Datei automatisch geschlossen Beispiel f r das Schreiben in eine Datei integer n x real y0 dim x 9 y0 9 for n 0 to 9 x n n yO n n 100 next n open ARYTEST writ x y0 end 38 2 6 Anweisungen zur Dateisteuerung 2 6 1 Die OPEN Anweisung OPEN ffnet eine Textdatei zum Lesen mit der READ Anweisung vgl 2 4 3 bzw LINE READ Anweisung 2 4 4 Syntax OPEN lt file name gt Der angegebene Dateiname kann eine vollst ndig qualifizierte oder relative Pfadangabe enthalten Ist keine Dateiendung angegeben so wird als Standard die Erweiterung DAT angenommen 2 6 2 Die OPEN Anweisung OPEN ffnet eine Bin rdatei zum Lesen mit der READ Anweisung 2 4 5 oder Schreiben mit der WRITE Anweisung 2 5 4 Syntax OPEN lt file name gt Der angegebene Dateiname kann eine vollst ndig qualifizierte oder relative Pfadangabe enthalten Ist keine Dateiendung angegeben so wird als Standard die Erweiterung ARY angenommen 2 6 3 Die OPEN 2 OPEN 4 Anweisungen Die Anweisungen ffnen eine Textdatei f r die Ausgabe mit PRINT 2 PRINT 4 siehe 2 5 1 Syntax OPEN 2 A lt file name gt OPEN 3 A lt file name gt OPEN 4 A lt file name gt Der angegebene D
59. ie angegebene Adresse als Offset im Datensegment interpretiert Die zweite Variante erlaubt die explizite Angabe einer Segmentadresse mit der intern offenbar das ES Register belegt wird Zwischen mehreren aufeinanderfolgenden POKE Aufrufen bleibt diese Belegung erhalten so dass dann die verk rzte Form nu rein Semikolon hinter POKE verwendet werden kann 2 9 6 Die RANDOMIZE Anweisung Die Anweisung initialisiert den internen Zufallszahlengenerator d h sie setzt den Startwert f r die RND Funktion Syntax RANDOMIZE lt integer expression gt Beispiel randomize amp 5a5a Anmerkung Die Initialisierung des Zufallszahlengenerators hat vor allem die Aufgabe zu gewahrleisten dass sich die mit RND erzeugten Zufallsfolgen zwischen mehreren Programmlaufen unterscheiden Deshalb ist es zweckm ig f r die Initialisierung keine Konstante sondern einen Wert zu verwenden der sich von Programmstart zu Programmstart ndert beispielsweise die Systemzeit 2 9 7 Die DPOKE Anweisung Die Anweisung schreibt ein Wort 16 Bits an die angegebene Speicheradresse 45 Usage DPOKE lt integer variable gt lt memory address gt lt integer expression gt Mit Ausnahme der Datengr e entspricht das Verhalten genau dem von POKE siehe 2 9 5 2 9 8 Die VALUE Anweisung Die VALUE Anweisung legt einen Integer Wert im AX Register ab Syntax VALUE lt integer expression gt Der Wert das
60. inaus k nnen Leerzeilen zur besseren Lesbarkeit des Quelltextes eingef gt werden 2 1 2 Datentypen TBC unterst tzt drei grundlegende Datentypen integer real und string Eine Integer Zahl ist eine vorzeichenbehaftete Ganzzahl mit einer Breite von 2 Byte und einem Wertebereich von 32768 bis 32767 Hexadezimalzahlen werden durch ein vorangestelltes Ampersand amp gekennzeichnet z B bedeutet amp 1234 1234H In Integer Ausdr cken k nnen Literale wie A und AB als numerische Werte entsprechend dem ASCII Code verwendet werden F r Real Zahlen wird eine 5 Byte Gleitpunktdarstellung verwendet die eine effektive Genauigkeit von 9 5 Stellen der Mantisse bei einem Wertebereich der Absolutwerte von 2 9387359E 39 bis 1 7014118E 38 erlaubt Sie besteht aus einem 4 Bytes breiten Mantissenanteil und einem Byte Bias 80H f r den Exponenten Zeichenketten Strings werden in doppelte Anf hrungszeichen eingeschlossen notiert und k nnen h chstens 255 Zeichen lang sein Intern werden Strings jeweils durch ein Null Byte abgeschlossen Eine String Variable enth lt die Adresse Zeiger des ersten Zeichens des Strings Dementsprechend l sst sich eine solche Adresse mit dpeek loc A ermitteln 2 1 3 Variablen Variablen der Typen Integer Real und String werden wie nachfolgend beschrieben definiert Integer Variablen Namen von Integer Variablen bestehen aus alphanumerischen Zeichen sowie dem Unterstrich _ und m ssen mit
61. iorit t Das Ergebnis eines Integer Ausdrucks wird im AX Register des 8086 abgelegt Der Anfangswert des AX Registers am Beginn der Auswertung eines Integer Ausdrucks wird durch die Pseudo Variable repr sentiert Real Ausdr cke Der rechtsseitige Ausdruck einer Real Zuweisung wird als Real Ausdruck behandelt Beispiele x yrZ d atb c y sin x z Im Ausdruck vorkommende Integer Werte werden vor ihrer Verwendung implizit in Werte vom Real Typ konvertiert Mit Hilfe der Funktion float ist es m glich Teilausdr cke vom Integer Typ zu verwenden Beispiel integer x y Z yO xt y z Implizite Konvertierung aller Terme nach Real yO float x y z Real Konvertierung nach der Integer Operation x0 float peek 100 2 Konvertierung nach Integer Operation mit Integer Funktion Hinweis Indexangaben von Arrays werden grunds tzlich als Integer Ausdr cke berechnet String Ausdr cke Der rechtsseitige Ausdruck einer String Zuweisung wird als String Ausdruck interpretiert Findet dabei keine Verkettung statt so wird nur ein Verweis auf die jeweilige Zeichenkette Zeiger keine Kopie davon zugewiesen Beispiele 11 c a b abc lt Verkettung der Zeichenketten bS a nur Zeigerzuweisung b a erzwungene Kopie durch Anh ngen eines Leerstrings Zur direkten Manipulation von Zeichenketten lassen sich die d peek Funktion und die poke Anweisung wie nachfolgend gezeigt verwenden
62. lt string gt lt integer expressionl gt lt integer expression2 gt Wird das zweite Integer Argument die L ngenangabe weggelassen geh ren alle Zeichen ab dem angegebenen Index zum Ergebnis 61 Beispiel aS mid abcdefg 3 2 Hier wird die Zeichenkette cd zur ckgegeben Anmerkung Die Indexz hlung f r den Beginn der Teilzeichenkette beginnt mit 1 nicht mit 0 Eine L ngenangabe kleiner 1 einschlie lich negativer Werte oder ein ung ltiger Startindex ergibt eine leere Zeichenkette 4 Die LEFT Funktion Die Funktion liefert die linke Teilzeichenkette eines Strings mit h chstens der angegebenen L nge Syntax LEFTS lt string gt lt integer expression gt Beispiel aS left abcdefg 3 Hier wird die zeichenkette abc zuruckgegeben Anmerkung Ist die angegebene Lange gr er als die Lange der Quell Zeichenkette wird die gesamte Zeichenkette zur ckgegeben Eine L ngenangabe kleiner 1 einschlie lich negativer Werte ergibt eine leere Zeichenkette 5 Die STR Funktion Die Funktion wandelt das Ergebnis eines numerischen Ausdrucks in eine Zeichenkette um Syntax STRS lt format gt lt integer or real expression Dabei kann eine Formatierung in der gleichen Weise wie f r die PRINT Anweisung siehe 3 verwendet werden Beispiel STRS n m X0 62 6 Die INKEY Funktion Die Funktion gibt ein Zeichen Eingabezeichen
63. m Editor das folgende einfache Programm print Hello world end Wenn Sie mit der Eingabe des Programms fertig sind speichern Sie es auf eine Diskette oder Festplatte Nun bersetzen Sie den Quelltext in derselben Weise wie im vorherigen Abschnitt C BAS gt tbc testl lt cr gt Falls Sie dabei eine Warnung oder Fehlermeldung wie z B Syntax error erhalten haben pr fen Sie ob Sie das Programm genau wie oben angegeben geschrieben haben und bersetzen es anschlie end noch einmal Sie sollten nun die Meldung Complete amp Saved erhalten Nach erfolgreicher bersetzung f hren Sie das Programm aus C BAS gt testl lt cr gt Das Ergebnis sollte so aussehen Hello world Dieses Programm entspricht dem traditionellen C Programm von Kernighan und Ritchie Vergleichen Sie doch einmal die Gr e Ihres ausf hrbaren Programms mit diesem Ein weiteres Beispielprogramm input x print square x x square root sqr x end Nachdem Sie das Programm wie oben beschrieben eingegeben und kompiliert haben erhalten Sie nach Eingabe einer Zahl am Prompt das Quadrat und die Quadratwurzel der Zahl M glicherweise werden Sie sich fragen wo die in einem traditionellen BASIC Programm blichen Zeilennummern sind TBC erfordert keine Angabe von Zeilennummern verwendet sie jedoch als Referenz Label Es ist allerdings auch zul ssig Zeilennummern am Beginn jeder Zeile zu notieren 2 Anweisungen 2 1 Das Programmformat
64. ne tabstring n integer n while peek n lt gt O if 9 then print else print chr n n t1 wend print return subend Erg nzung In obigem Beispiel wird ein kleiner Trick angewendet Das Unterprogramm tabstring erwartet ein Integer Argument Ruft man es mit einer Zeichenkette auf so wird die Anfangsadresse der Zeichenkette in n bergeben Nun kann gepr ft werden ob das jeweilige Zeichen ein Tabulator ASCII Code 9 oder ein gew hnliches Zeichen ist Anschlie end wird n inkrementiert und damit das n chste Zeichen adressiert Das Ende ist erreicht wenn das abschlie ende Null Byte der Zeichenkette gelesen wurde 37 2 5 2 Die WIDTH Anweisung Die Anweisung legt die Zeilenlange fur die PRINT Anweisung fest Syntax WIDTH lt index number gt lt line width gt Beispiel fur die Konsolenausgabe width 0 72 Die Indizes fur das Ausgabegerat entsprechen denen der PRINT Anweisung 2 Dabei kann 0 auch weggelassen werden Die Zeilenlange ist fur alle Gerate auf 80 voreingestellt beachten Sie dass fur viele Konsolen 79 die geeignete Einstellung ist 2 5 3 Die TAB Funktion Mit TAB wird der Cursor innerhalb der PRINT Anweisung am die angegebene Position verschoben Syntax TAB lt cursor position gt Beispiel print abcdefg tab 20 xyz Beachten Sie dass Steuercodes lt 20h au er 8 und Odh nicht mitgez hlt werden 2 5 4 Die WRITE Anweisung D
65. ompiler einen Illegal end Fehler 2 2 9 Die REM Anweisung Mit der REM Anweisung wird eine Zeile als Kommentar gekennzeichnet und damit von der bersetzung ausgeschlossen Syntax REM lt remarks gt Alternativ zum Schl sselwort REM kann auch ein Sternchen am Zeilenanfang zur Kennzeichnung einer Kommentarzeile verwendet werden Beispiel rem memorandum remarks Ein unmittelbar nach einer Zeilennummer notiertes Apostroph ist ebenfalls zur Kennzeichnung einer Kommentarzeile verwendbar 2 2 10 Die KILL Anweisung Mit der KILL Anweisung wird der gesamte Datenbereich f r Zeichenketten gel scht Syntax KILL Genau genommen werden dabei keine Speicherbereiche berschrieben sondern es wird lediglich der Pufferzeiger der auf das Ende des String Bereichs zeigt neu initialisiert Hinweis Man kann Teile der String Daten l schen indem man den Zeiger Adresse 0020H modifiziert um damit die automatische Freigabe zu vermeiden Beispielsweise kann man mit temp dpeek amp 20 den Zeiger zwischenspeichern bevor eine Folge von Anweisungen ausgef hrt wird und anschlie end mit dpoke amp 20 temp wieder zur cksetzen und damit den inzwischen belegten String Speicher wieder freigeben 2 2 11 Die MERGE Anweisung Mit MERGE wird eine Quellcode Bibliothek w hrend der bersetzung ins Hauptprogramm eingebunden Syntax MERGE lt file name gt 18 Ist fur den Datein
66. onstante Beispiel real xyz 1 23 abc 2 56 3 Die CHARACTER Anweisung Die Anweisung dient der Deklaration von String Variablen Zeichenketten Syntax character lt variable name gt lt variable name gt Dabei ist variable name ein Bezeichner aus alphanumerischen Zeichen und dem Unterstrich _ der mit einem Buchstaben beginnt Beispiel character string test dim string 10 4 Deklaration lokaler Variablen Einfache Variablen die innerhalb eines Unterprogramms oder einer Funktion deklariert werden sind lokal zu diesem Unterprogramm oder dieser Funktion Beispiel subroutine test integer cntr real xyz 13 Einfache Variablen die auRerhalb von Unterprogrammen deklariert werden haben globale Gultigkeit Achtung Array Variablen haben immer einen globalen G ltigkeitsbereich unabh ngig davon ob sie innerhalb oder au erhalb eines Unterprogramms deklariert werden 5 Deklaration von Parametern Parameterdeklarationen werden f r Unterprogramme und Funktionen ben tigt Beispiel subroutine test i xyz abc integer i real xyz Dabei m ssen grunds tzlich alle Parameter mit Ausnahme von Zeichenkettenargumenten deren Name mit dem Dollarzeichen endet deklariert werden 2 2 2 Definition von Integer Konstanten Integer Konstanten werden durch einen Bezeichner der mit einem Unterstrich _ beginnt definiert Syntax _ lt constant name gt lt integer number gt Beispiel
67. per Referenz zu bergeben also den Inhalt eines Integer Arguments zu modifizieren ist folgende Notation m glich 41 integer a a 12 call test loc a print a stop subroutine test x integer x print i dpeek x dpoke x 56 return subend end Anmerkung Hier wird nicht der Integer Wert selbst an das Unterprogramm test bergeben sondern die Adresse der Variablen a in der der Wert gespeichert ist Das Unterprogramm modifiziert dann mit der DPOKE Anweisung vgl 2 9 7 den Wert der Variablen Beispiel f r numerische Array Argumente subroutine test a 10 b0 5 5 subroutine test a bO will work too integer a real b0 integer i j for i 0 to 10 print a i next i print Tor 17 0 toS for j 0 to 5 print bO i j next j print next i return subend integer x i real y0 dim x 10 y0 5 5 for i 0 to 10 x i i next i for i 0 to 5 for j 0 to yO i j next j next i call test x yO end U i j 2 8 Die FUNCTION Anweisung 42 Die FUNCTION Anweisung kennzeichnet den Beginn der Definition einer benutzerdefinierten Funktion und registriert deren Namen Syntax FUNCTION lt name gt lt parameter gt lt parameter gt lt procedure gt RETURN lt real expression gt FNEND Benutzerdefinierte Funktionen sind benannten Unterprogrammen sehr ahnlich Der Wesentliche Unterschied besteht darin dass Funktionen stets einen R ckgabewert
68. rufe auf den Stack gelegt Das Abr umen des Stacks bernimmt der Aufrufer Lokale Integer Variablen stehen in der Reihenfolge ihrer Deklaration unterhalb der R ckkehradresse Sie werden unmittelbar beim Eintritt in ein Unterprogramm auf den Stack gelegt Das Unterprogramm muss den Wert des BP Registers sichern und den Stack Pointer SP bei der R ckkehr auf den Wert von BP setzen Beim Eintritt in ein Unterprogramm sieht der Stackframe demnach wie folgt aus BP 2n arg n BP 4 arg2 BP 2 argl BP return offset BP 2 local integer variable 1 BP 2 local integer variable 2 SP BP 2m local integer variable m Lokale Real und String Variablen sind statisch Das bedeutet sie sind zwar nur lokal sichtbar werden aber nicht auf den Stack sondern global im Datensegment angelegt 2 Referenzieren von Zeilennummern und Labels Als Offset Adressen mov bx 100 mov bx si 100 cx mov ax 100 2 inc byte ptr 100 Als Sprungziele jmp 100 call 100 2 jz name Erganzung Das Symbol liefert im Inline Assembler die Offset Adresse eines Symbols im Codesegment Es ist auf Zeilennummern ebenso anwendbar wie auf Label Bezeichner oder die Bezeichner 69 benannter Unterprogramme bzw Funktionen wobei der Offset hier gleichbedeutend mit der Einspriungadresse ist 3 BYTE Definition byte 5 A ABCDE 100 TEST Hierbei werden 100 und TEST in r
69. sie nicht in Anf hrungszeichen eingeschlossen sind Erg nzung Die mit READ verwendete Datendatei ist immer eine Textdatei Hat sie eine andere Erweiterung als DAT so muss die Erweiterung im Argument der OPEN Anweisung mit angegeben werden Um innerhalb von Zeichenketten in der Datei Anf hrungszeichen oder das Komma unterzubringen gelten die gleichen Regeln wie unter 2 4 1 beschrieben Als zus tzliches Trennzeichen ist innerhalb der Datei der Zeilenumbruch zugelassen D h es ist z B auch m glich jeden einzelnen Wert in eine separate Zeile zu schreiben Die READ Anweisung liest bei jedem Aufruf genau so viele Werte aus der Datei wie Variablen als Argumente angegeben wurden und erwartet dass auch hinter dem letzten gelesenen Wert ein Trennzeichen steht Das obige Beispiel f hrt also zu einem Fehler wenn hinter dem Wert 2 345 in DTEST DAT nicht mindestens noch ein Trennzeichen z B ein Zeilenumbruch steht 2 4 4 Die LINE READ Anweisung Die Anweisung liest eine Zeile au seiner ge ffneten Textdatei und weist deren Inhalt der angegebenen String Variablen zu Syntax LINE READ lt string variable gt Beispiel Die Datendatei ist hier die selbe wie im Beispiel unter 2 4 3 open DTEST line read a print a end Erg nzung Anders als bei der LINE INPUT Anweisung erlaubt die LINE READ Anweisung keine numerische Variable als Argument Der Aufruf f hrt zu einem Fehler wenn die gelesene
70. t den Arkustangens des gegebenen Arguments und liefert ein Ergebnis im Bogenma Radiant zwischen pi 2 und pi 2 Syntax ATN lt real expression 13 Die EXP Funktion Die Funktion liefert den Wert der Expotentialfunktion e wobei x der Wert des bergebenen Arguments ist Syntax EXP lt real expression 14 Die LOG function Die Funktion berechnet den Nat rlichen Logarithmus In x des Arguments Syntax LOG lt real expression gt Der als Argument verwendete Ausdruck muss einen echt positiven Wert ergeben andernfalls wird ein Fehlerzustand vom Typ Z vgl Fehler Referenz nicht gefunden erzeugt 58 15 Die LGT Funktion Die Funktion berechnet den Zehnerlogarithmus g x des Arguments Syntax LGT lt real expression gt Der als Argument verwendete Ausdruck muss einen echt positiven Wert ergeben andernfalls wird ein Fehlerzustand vom Typ Z vgl Fehler Referenz nicht gefunden erzeugt 16 Die HSN Funktion Die Funktion berechnet den Sinus Hyperbolicus des Arguments Syntax HSN lt real expression gt 17 Die HCS Funktion Die Funktion berechnet den Kosinus Hyperbolicus des Arguments Syntax HCS lt real expression gt 18 Die HTN Funktion Die Funktion berechnet den Tangens Hyperbolicus des Arguments Syntax HTN lt real expression gt 19 Benutzerdefinierter FN_name Funktionsaufruf Dieses Konstrukt erm glicht es eine mit der FU
71. usrichtung zumeist eine etwas h here Ausf hrungsgeschwindigkeit 13 Option x Die bersetzung erfolgt mit den Bedingungen die am Zeilenanfang definiert sind So verwendet man e bzw c um EXE bzw COM Dateien zu erzeugen Erg nzung Die Beschreibung ist etwas missverst ndlich Etwas ausf hrlicher l sst sich folgendes sagen Tokiwa Basic unterst tzt eine einfach Form bedingter bersetzung Mit der Option gefolgt von einem Buchstaben l sst sich dieser Buchstabe gewisserma en als Symbol f r die bedingte bersetzung definieren Leitet man eine Programmzeile mit und nachfolgendem Buchstaben ein so wird sie nur dann bersetzt wenn der betreffende Buchstabe mit der Option x als Symbol definiert wurde Es gibt dar ber hinaus die vordefinierten Symbole c beim Erzeugen einer COM Datei und e beim Erzeugen einer EXE Datei in Abh ngigkeit von der Option c F r ihren Einsatz ist keine Angabe der x Option erforderlich Beispiel options y c y print Symbol y defined c print Program is in COM format e print Program is in EXE format Eine praktische Anwendung ist dem ENVIRON BAS zu entnehmen wo in Abh ngigkeit davon ob das Programm als EXE oder COM Datei erstellt wird das Bestimmen der PSP Adresse auf unterschiedliche Weise erfolgt 14 Option Il Die Option legt fest dass in Unterprogrammen deklarierte Variablen statisch sind Erg nzung

Download Pdf Manuals

image

Related Search

Related Contents

Guia do Usuário  Ch RHTEMP C % Ch  ImageQuant™ LAS 4000  NEW コンセプトコントローラ NEW コンセプトコントローラ 6 型の表示  Compaq iPAQ Home Internet Appliance IA-1 (178358  取扱説明書 卯  Model 8000/8008 Modular Controller  Ryobi Drill Press Drill User Manual  Manual soportPC  

Copyright © All rights reserved.
Failed to retrieve file