Sa., 07 Juni 2025 20:23:28 +0200

C64 BASIC V2.0: Befehl: GOSUB

-


Letztes Update am Sa., 31 Mai 2025 00:05:05 +0200 von Andreas Potthoff

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.


BefehleCLOSE, 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
FunktionenABS, ASC, ATN, CHR$, COS, EXP, FRE, INT, LEFT$, LEN, LOG, MID$, PEEK, POS, RIGHT$, RND, SGN, SIN, SQR, STR$, TAN, USR, VAL
Konstanten und SystemvariablenPi, ST, TI, TI$
image_pdfimage_print
Andreas Potthoffhttps://electrodrome.net
Computer-Nerd seit der ersten 8-bit Generation (1981), SysOp, IT-Spezialist, System Administrator, Webmaster, Maker...
0 0 votes
Artikel Bewertung
Datenschutz
0 Kommentare
Newest
Oldest Most Voted
Inline Feedbacks
View all comments

Related Stories

0
Would love your thoughts, please comment.x