EXEC (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
EXEC (TSB)
Syntax: [EXEC] <label>
Parameter
label: Name einer Prozedur
Einordnung
Typ: Anweisung
Kontext: Strukturkontrolle
Aufgabe: Aufrufen einer Prozedur
Abkürzung: eX
Token: $64 $33 (100 51)
Verwandte Befehle
CALL - PROC - END PROC - CHECK


Dieser Artikel beschreibt das TSB-Schlüsselwort EXEC (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls EXEC.

Typ: Anweisung 
Syntax: [EXEC] <label>

In TSB können genau wie in Simons' Basic Unterprogramme mit einem Namen versehen werden (siehe PROC). Sie werden dadurch unabhängig von ihrer Lage im Programm und der Programmierer kann leichter den Überblick bewahren (Namen lassen sich leichter einem Zweck zuordnen als Zeilennummern). Der Befehl EXEC ruft ein solches Unterprogramm auf, arbeitet es ab und kehrt an seinen Ausgangsort zurück. Er entspricht damit weitgehend dem BASIC-V2-Befehl GOSUB.

Anders als in Simons' Basic darf das Schlüsselwort EXEC weggelassen werden (ähnlich wie LET bei der Wertezuweisung an Variablen). Deshalb darf aber ein Prozedurname nicht mit einem BASIC-Schlüsselwort beginnen, da es dann zu Fehlermeldungen wegen vermeintlich fehlender oder falscher Befehlsparameter beim Aufruf der Prozedur kommen würde.

Außerdem dürfen in der Zeile, in der ein Prozeduraufruf verwendet wird, beliebige weitere BASIC-Befehle folgen. Auch ein Leerzeichen am Anfang eines Labels (die eventuelle Lücke zwischen PROC und dem Labelnamen wie im Beispiel unten) ignoriert das TSB-EXEC. Prozeduraufrufe sind damit viel flexibler zu handhaben als unter Simons' Basic (vgl. Beispiel 2 zum TSB-Befehl DUP).

Die Abarbeitungsgeschwindigigkeit von EXEC und CALL ist unter Simons' Basic sehr viel langsamer als bei den vergleichbaren Befehlen GOSUB und GOTO in Basic V2, da bei der Suche des Sprungziels alle Zeichen des Labels verglichen werden müssen. Um diesen Nachteil auszugleichen, legt TSB während der Ausführung eines Programms eine Tabelle aller PROC-Adressen an und sucht PROCs zuerst in dieser Tabelle (siehe CHECK). Die Abarbeitungsgeschwindigkeit eines Programms mit vielen Prozeduren erhöht sich dadurch signifikant.

Wird das Label hinter EXEC im Programm nicht gefunden, so erscheint die Fehlermeldung ?PROC NOT FOUND ERROR. Wenn ein TSB-Programm auf ein Prozedurende (END PROC) trifft, ohne eine Prozedur aufgerufen zu haben, erscheint die Meldung ?END PROC WITHOUT EXEC ERROR. Bei zu vielen Verschachtelungen (bei mehr als zehn) meldet TSB einen ?STACK OVERFLOW ERROR.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Ein komplettes Anwendungsbeispiel beim Simons-Basic-Befehl MOB_SET (Beispiel 2).

Beispiel 1

10 PRINT "Bitte eine Taste druecken!":warten:PRINT "Danke"
999 END

1000 PROC warten
1010 DO NULL
1020 END PROC

Nach der Aufforderung, eine Taste zu drücken, wartet das Programm und gibt schließlich eine Rückmeldung aus.


Beispiel 2
Demonstration einer Schachtelung:

100 .ZEHN:END
110 PROC .EINS
120 PRINT"EINS"
130 END PROC
140 PROC.ZWEI
150 .EINS:PRINT"ZWEI"
160 END PROC
170 PROC.DREI
180 .ZWEI:PRINT"DREI"
190 END PROC
200 PROC.VIER
210 .DREI:PRINT"VIER"
220 END PROC
230 PROC.FUENF
240 .VIER:PRINT"FUENF"
250 END PROC
260 PROC.SECHS
270 .FUENF:PRINT"SECHS"
280 END PROC
290 PROC.SIEBEN
300 .SECHS:PRINT"SIEBEN"
310 END PROC
320 PROC.ACHT
330 .SIEBEN:PRINT"ACHT"
340 END PROC
350 PROC.NEUN
360 .ACHT:PRINT"NEUN"
370 END PROC
380 PROC.ZEHN
390 .NEUN:PRINT"ZEHN"
400 END PROC 
410 PROC.ELF
420 .ZEHN:PRINT"ELF"
430 END PROC
RUN
EINS
ZWEI
DREI
VIER
FUENF
SECHS
SIEBEN
ACHT
NEUN
ZEHN

READY.

Ändert man die Anfangszeile in 100 .ELF:END, so wird der Stack Overflow erzeugt.