Das Schneider CPC Systembuch

Das Innenleben der CPC-Rechner

Die CPU Z80

Unterprogramm-Aufrufe

Grundlagen: UnterprogrammeUnterprogramme werden bei der Die ICs im Überblick: Die CPU Z80
Das Innenleben der CPC-Rechner: Die CPU Z80
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die CPU Z80
Z80
mit dem Assembler-Befehl 'Maschinencode über HIMEM: CALLCALL' oder 'Speicheraufteilung durch ein Vordergrund-Programm: RST 3
LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY
LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP
LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL
LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL
LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM
LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP
LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART
LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRY
RST
' aufgerufen. Bei 'Maschinencode über HIMEM: CALLCALL' muss man die gewünschte Adresse Adressierungsarten der Z80: Unmittelbarunmittelbar angeben, außerdem kann man bei Bedarf Adressierungsarten der Z80: Implizitimplizit im Befehlsbyte eins der 4 Die Z80: Wirkung der Z80-Befehle auf die FlagsFlags Erklärung der Anschlussbelegung: Testtesten, um nur bei erfüllter Bedingung zu verzweigen. 'Speicheraufteilung durch ein Vordergrund-Programm: RST 3
LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY
LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP
LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL
LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL
LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM
LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP
LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART
LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRY
RST
' ist das Mnenonic für die ROM-Konfiguration: RestartsRestarts, bei denen Adressierungsarten der Z80: Implizitimplizit im Befehlsbyte eine der 8 möglichen Einsprungsadressen kodiert ist. Eine bedingte Verzweigung ist bei ihnen nicht möglich.

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
Das Innenleben der CPC-Rechner: Die CPU Z80
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die CPU Z80
CPUs
ist das durchaus anders. Die 6502 pusht beispielsweise immer die Adresse des letzten Datentypen: Bytes
Datenbreite: Bytes
Bytes
des aufrufenden Befehls, mithin also immer eine um eins kleinere Adresse als Anhang: Die Z80die 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)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
register
' vom Stapel wieder runterzuholen.

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)

Valid HTML   Valid CSS