C64 BASIC V2.0: Befehl: GOSUB
GOSUB
- Token: 141 / $8D | Abkürzung: goS | ROM Exec: 43139 / $A883
- Typ: Anweisung | Funktion: Programmstruktur
- Syntax: GOSUB <line number>
Aktion, Hinweise, Tipps, Tricks:
Aktion: Dies ist eine spezielle Form der GOTO-Anweisung mit einem wichtigen Unterschied: GOSUB merkt sich seine ursprüngliche Funktion. Wenn die RETURN-Anweisung (nicht identisch mit der <RETURN>-Taste auf der Tastatur) im Programm erreicht wird, springt das Programm zurück zur Anweisung, die unmittelbar auf die ursprüngliche GOSUB-Anweisung folgt.
Der Hauptzweck einer Subroutine (GOSUB bedeutet eigentlich „GO to a SUBroutine“) besteht darin, dass ein kleiner Programmabschnitt von verschiedenen Programmabschnitten verwendet wird. Durch die Verwendung von Subroutinen, anstatt dieselben Zeilen immer wieder an verschiedenen Stellen im Programm zu wiederholen, lässt sich viel Programmspeicherplatz sparen. GOSUB ähnelt DEF FN. DEF FN spart Platz bei der Verwendung einer Formel, während GOSUB bei der Verwendung einer mehrzeiligen Routine Platz spart.
Beispiele:
100 PRINT "THIS PROGRAM PRINTS" 110 FOR L = 1 TO 500:NEXT 120 PRINT "SLOWLY ON THE SCREEN" 130 FOR L = 1 TO 500:NEXT 140 PRINT "USING A SIMPLE LOOP" 150 FOR L = 1 TO 500:NEXT 160 PRINT "AS A TIME DELAY." 170 FOR L = 1 TO 500:NEXT
Hier ist das gleiche Programm mit GOSUB:
100 PRINT "THIS PROGRAM PRINTS" 110 GOSUB 200 120 PRINT "SLOWLY ON THE SCREEN" 130 GOSUB 200 140 PRINT "USING A SIMPLE LOOP" 150 GOSUB 200 160 PRINT "AS A TIME DELAY." 170 GOSUB 200 180 END 200 FOR L = 1 TO 500 NEXT 210 RETURN
Jedes Mal, wenn das Programm ein GOSUB ausführt, werden die Zeilennummer und die Position in der Programmzeile in einem speziellen Bereich, dem sogenannten „Stack“, gespeichert, der 256 Bytes Speicher belegt. Dies begrenzt die Datenmenge, die im Stack gespeichert werden kann. Daher ist die Anzahl der speicherbaren Subroutinen-Rücksprungadressen begrenzt. Es sollte darauf geachtet werden, dass jedes GOSUB die entsprechende RETURN-Adresse erreicht, da sonst der Speicher knapp wird, obwohl genügend Bytes frei sind.
Befehle | CLOSE, CLR, CMD, CONT, DATA, DEF, DIM, END, FOR, GET, GET#, GOSUB, GOTO, IF, INPUT, INPUT#, LET, LIST, LOAD, NEW, NEXT, ON, OPEN, POKE, PRINT, PRINT#, READ, REM, RESTORE, RETURN, RUN, SAVE, STOP, SYS, VERIFY, WAIT |
Befehle Spezial (Bywords) | FN, GO, NOT, SPC(, TAB(, THEN, TO, STEP |
Arithmetische und logische Operatoren | +, –, *, /, ^, >, =, <, AND, OR |
Funktionen | ABS, ASC, ATN, CHR$, COS, EXP, FRE, INT, LEFT$, LEN, LOG, MID$, PEEK, POS, RIGHT$, RND, SGN, SIN, SQR, STR$, TAN, USR, VAL |
Konstanten und Systemvariablen | Pi, ST, TI, TI$ |