Die CPU Z80Unterprogramm-AufrufeGrundlagen: UnterprogrammeUnterprogramme werden bei der Die ICs im Überblick: Die CPU Z80 Bei den ROM-Konfiguration: RestartsRestarts gibt es in verschiedenen Assemblern zwei unterschiedliche Methoden, mit denen man angeben kann, welche Adresse man aufrufen will: Einige Assembler benutzen hierfür die Einsprungsadressen (0, 8, 16 ... 56), andere nummerieren sie einfach durch (0,1, ... 7). Glücklicherweise gibt es dadurch aber keine größeren Probleme, da es zwischen beiden Methoden keine Überschneidungen gibt (außer der Real: NullNull, die aber in beiden Fällen den selben ROM-Konfiguration: RestartsRestart bezeichnet). Der dazu passende Abschlussbefehl ist 'RET', mit dem das gerufene Grundlagen: UnterprogrammeUnterprogramm wieder zum Hauptprogramm zurückkehrt. Streng genommen ist auch das eine Verzweigung. Auch 'RET' kann Adressierungsarten der Z80: Implizitimplizit an eine Bedingung geknuepft sein. Da das Grundlagen: UnterprogrammeUnterprogramm mit 'RET' wieder an die Stelle des Aufrufs zurückkehren soll, muss beim Aufruf der Programmzeiger PC nicht nur auf die Adresse des Grundlagen: UnterprogrammeUnterprogramms eingestellt, sondern dessen aktueller Inhalt vorher erst gerettet werden. Ein einfacher Sprung lässt sich wie folgt beschreiben: JP #9000 entspricht LD PC,#9000 Ein Die CPU Z80: Unterprogramm-AufrufeUnterprogramm-Aufruf ist dagegen eine Befehlskombination: Maschinencode über HIMEM: CALLCALL #9000 entspricht PUSH PC
LD PC,#9000
Und der Abschluss eines Grundlagen: UnterprogrammeUnterprogrammes: RET entspricht POP PC Für einen Die CPU Z80: Unterprogramm-AufrufeUnterprogramm-Aufruf wird also immer die Rücksprungsadresse auf den Maschinenstapel gepusht. Diese Adresse zeigt dabei immer auf den Beginn des nächsten Befehls (bei anderen Die ICs im Überblick: Die CPU Z80 Auf dem Maschinenstapel ist die Rücksprungsadresse dann ungeschützt für das Grundlagen: UnterprogrammeUnterprogramm erreichbar. Falls das hier einige Manipulationen vornehmen will (was im Betriebssystem des Schneider CPC ausgesprochen häufig der Fall ist), braucht es sie nur mit 'POP Die Tonausgabe: Das Kontrollregister (Reg. 7) Es ist aber auch der umgekehrte Fall denkbar: Ein Doppelregister wird auf den Stack gepusht und dann mittels 'RET' in den Programmzeiger PC geladen. Der Effekt ist ein indirekter Sprung zu der Adresse, die in dem Doppelregister angegeben war: PUSH BC RET entspricht dem nicht existierenden Z80-Befehl: JP (BC) |