Einführung
Oftmals hat man beim Programmieren bestimmte Quelltext-Abschnitte, die mehrmals vorkommen. Damit sich der Quelltext möglichst übersichtlich hält, verwendet man Unterprogrammen um Quelltext-Abschnitte zusammenzufassen.
Was passiert, wenn ein Unterprogramm aufgerufen wird?
Sobald ein Unterprogramm aufgerufen wird, wird zuerst einmal die Rücksprungadresse auf dem Stack abgelegt und der Programm-Counter (PC) mit der Adresse des Unterprogramms geladen. Anschließend werden die Befehle innerhalb des Unterprogramms, also das Unterprogramm selbst, ausgeführt. Zum Schluss wird die Rücksprungadresse wieder vom Stack geholt und der Programm-Counter (PC) mit dieser Adresse geladen.
Anwendung
Stackpointer setzen
Dem Stackpointer wird die Adresse 0x80 zugewiesen, um möglichen Problemen vorzubeugen:
mov SP,#0x80
Unterprogramm erstellen
Die Anwendung ist recht simpel. Man muss lediglich eine Sprungmarke setzen und das Ganze mit einem ret beenden.
unterprogramm: //Quellcode ret
Der Aufruf eines Unterprogramms erfolgt über call.
call unterprogramm
Wichtig ist, dass sich der Stack nach dem Laden des Unterprogramms und vor der Ausführung des Befehls ret im selben Zustand befindet, damit die korrekte Rücksprungadresse geladen werden kann.
Zusammenfassung
Man benötigt eine „Sprungmarke“ und den Befehl ret um ein Unterprogramm zu bilden. Aufrufen kann man es mithilfe von call.
Quelltext-Beispiel
Das folgende (kommentierte) Quelltext-Beispiel ruft das Unterprogramm „hello“ auf:
$NOMOD51 //Vordefinitionen vergessen #include <at89c5131.h> //Neue Definitionen einbinden cseg at 0x0000 call hello //Unterprogramm "hello" aufrufen hello: //Sprungmarke "hello" mov a,#1 //Wert 1 in Akkumulator schieben ret //Befehl signalisiert Unterprogramm beendet end