Die beiden Basic Befehle GOTO und GOSUB erfüllen im Grunde beide die selbe Funktion. Sie dienen dazu innerhalb eines Programmes zu springen. Dabei unterscheiden sie sich aber in einem wichtigen Merkmal aus dem sich dann auch unterschiedliche Anwendungsfälle ergeben.
Sehen wir uns zunächst einmal den Befehl GOTO an. GOTO steht für “GO TO” (englisch für: Gehe zu) .
Innerhalb eines Programmbeispiels stellt sich die Syntax des Befehls so dar:
Zeilennummer GOTO Ziel (Zeilennummer)
Wenn wir das kleine Programm ausführen, sehen wir den Text “HALLO WELT” der sich in einer Endlosschleife wiederholt.
Denn in Zeile 20 springen wir mit dem GOTO-Befehl zurück in die Zeile 10 und der Programmablauf wird wiederholt bis das Programm abgebrochen wird. Wir nutzen GOTO also hier um innerhalb eines Programmes zurückzuspringen und so eine Endlosschleife zu erzeugen.
Auch vorwärts kann gesprungen werden. Dabei werden alle Befehle zwischen dem GOTO Befehl und der Zielzeile übersprungen und ignoriert.
Der GOSUB Befehl (Go subroutine, englisch für : Gehe zu Subroutine) macht im Prinzip das Gleiche, aber mit dem Unterschied dass bei seinem Aufruf direkt hinter dem Befehl eine Sprungmarke gesetzt wird.
Das bedeutet, dass wir mithilfe des RETURN Befehls später wieder genau an die Stelle des Programms zurückkehren von der aus wir gesprungen sind.
Im Code stellt sich die Syntax des Befehls so
Zeilennummer GOSUB Ziel (Zeilennummer)
und die Struktur eines Subroutinenaufrufs mit GOSUB und RETURN so dar:
Erklärung:
In Zeile 50 springen wir mit dem GOSUB Befehl in die Subroutine (Unterprogramm) ab Zeile 500. Dabei wird eine Sprungmarke direkt hinter dem GOSUB Befehl gesetzt.
Nun führen wir den ab Zeile 500 hinterlegten Code aus, bis wir auf einen RETURN Befehl stoßen.
Der RETURN Befehl (englisch für : Zurückkehren) löst den Sprung zur vorher erstellten Sprungmarke aus, und das Hauptprogramm wird an der Stelle weiter ausgeführt an der wir es zuvor verlassen haben.
Auf diese Weise ist es möglich innerhalb eines Programmes mehrfach immer wieder in die Subroutine zu springen und dabei an den jeweiligen Sprungpunkt, von dem aus wir in die Subroutine gesprungen sind, zurückzukehren. Mit dem GOTO Befehl ist das nicht möglich.
GOTO und GOSUB werden in der Programmierung am C64 vielfältig eingesetzt, z.B. zur Erzeugung von Schleifen oder aber auch bei bedingten Verzweigungen, z.B.
IF A=1 THEN GOTO 200
wobei in diesem Fall der GOTO Befehl auch wegelassen werden kann.
Ein Video zu diesem Beitrag findet ihr auf meinen Youtube-Kanal.
Darin gehe ich auch noch detaillierter auf das Thema Subroutinen ein.


