Das Schneider CPC Systembuch

Das Innenleben der CPC-Rechner

Die CPU Z80

Adressierungsarten der Z80

In Puncto Die CPU Z80: Adressierungsarten der Z80Adressierungsarten wird der Maschinencode-Programmierer 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
nicht gerade verwöhnt. Schlägt sie mit ihren vielen Registern die meisten anderen Konkurrenten um Längen, so sieht es bei den Die CPU Z80: Adressierungsarten der Z80Adressierungsarten ziemlich mau aus. Eine genaue Unterscheidung der verschiedenen Die CPU Z80: Adressierungsarten der Z80Adressierungsarten krankt jedoch immer daran, dass meist mehrere kombiniert angewendet werden. Außerdem kann man, je nach Standpunkt, einen Befehl in die eine oder andere Gruppe einordnen. Und man kann ohne weiteres einzelne Die CPU Z80: Adressierungsarten der Z80Adressierungsarten nach belieben weiter aufdröseln oder zu Gruppen zusammenfassen.

So könnte man den folgenden Z80-Befehl durchaus unterschiedlich interpretieren:

LD (IX+3),10

Betrachten wir dabei nur das Ziel, was im Mnenonic als (IX+3) angedeutet ist.

Erste Streitfrage, ist das IX-Register Adressierungsarten der Z80: Implizitimplizit angegeben oder Adressierungsarten der Z80: Unmittelbarunmittelbar? Das Erste Datentypen: Bytes
Datenbreite: Bytes
Byte
des Befehls, &DD kann als erste Hälfte eines insgesamt 2 Datentypen: Bytes
Datenbreite: Bytes
Byte
langen Befehlscodes interpretiert werden. Dann wäre es Adressierungsarten der Z80: Implizitimplizit. Andererseits sagt dieses Datentypen: Bytes
Datenbreite: Bytes
Byte
aber überhaupt nichts über die Die Fließkomma-Routinen: FunktionenFunktion des Befehls aus, sondern ausschließlich, dass im (folgenden? - diesem?) Befehl das IX-Register benutzt werden soll. Dann wäre es wohl eher Adressierungsarten der Z80: Unmittelbarunmittelbare Festlegung auf das IX-Register.

Der Offset 3 wird, soviel ist zumindest klar, eindeutig Adressierungsarten der Z80: Unmittelbarunmittelbar im Anschluss an das (die?) Befehlsbyte(s) angegeben.

Nun werden IX-Register und Offset zusammengezählt und bilden so die Adresse der Speicherzelle, in die dann die 10 transportiert werden soll. Das ist Adressierungsarten der Z80: Register-indirektRegister-indirekt, weil Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
plus Offset nur als Zeiger auf eine Speicherzelle dienen; und auch noch Adressierungsarten der Z80: Indiziertindiziert, weil ein Erklärungen zu den Anschlussbezeichnungen: INDEXIndex, also der Offset 3, zum Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
addiert wurde. Wer jetzt aber ein bisschen kreativ ist, kann genausogut auf den Gedanken kommen, dass das nicht Adressierungsarten der Z80: Indiziertindiziert, sondern Adressierungsarten der Z80: Relativrelativ sei: Der Offset 3 wird zum Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
IX dazugezählt um so die benötigte Adresse zu bilden. Ganz analog zur Adressierungsarten der Z80: Relativrelativen Verzweigung:

JR +3

Hier wird der Offset zum PC-Register addiert und so der neue Wert für den PC ermittelt. Nur sagt man jetzt, die +3 sei eine Adress-Distanz und kein Erklärungen zu den Anschlussbezeichnungen: INDEXIndex.

Ein anderes Spielchen geht direkt auf Zilog zurück: Betrachten wir den Befehl:

LD LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
,10

Das Ziel der Datenbewegung ist das B-Register, und das ist im Befehlsbyte Adressierungsarten der Z80: Implizitimplizit angegeben. Zilog meint nun aber, das sei Register-direkt, weil das B-Register in einem 3-Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
breiten Adressfeld innerhalb des Befehlsbytes angegeben sei.

Verwirrt??

Aus all dem kann man eigentlich nur lernen, dass die Anzahl der Die CPU Z80: Adressierungsarten der Z80Adressierungsarten, die ein Prozessor beherrscht, nicht unbesehen als Kriterium für seine Leistungsfähigkeit herangezogen werden kann.

Trotzdem muss man aber irgendwie beschreiben, auf welche Arten Anhang: Die Z80die Z80 nun adressieren kann. Im Folgenden nun eine gebräuchliche Unterteilung:

Implizit

Alle Befehle, bei denen eine Daten-Quelle oder -Ziel Adressierungsarten der Z80: Implizitimplizit im Befehlsbyte angegeben sind. Das sind 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
ausschließlich Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
. In dem Ein-Byte-Befehl 'ADC_A,LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
' wird als Datenziel und als eine Daten-Quelle Adressierungsarten der Z80: Implizitimplizit das A-Register angegeben. Im weiteren Sinne Adressierungsarten der Z80: Implizitimplizit (laut Zilog 'Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
direkt') wird das B-Register als die andere Daten-Quelle festgelegt.

Unmittelbar

Diese Die CPU Z80: Adressierungsarten der Z80Adressierungsart kommt nur als Daten-Quelle in Frage. Hierbei wird dem Befehlsbyte eine Konstante angehängt, je nach benötigter Länge ein Datentypen: Bytes
Datenbreite: Bytes
Byte
oder ein Datenbreite: WordsWord. In 'ADC_A,120' wird die Konstante 120, ein Datentypen: Bytes
Datenbreite: Bytes
Byte
, Adressierungsarten der Z80: Unmittelbarunmittelbar angegeben.

Absolut

Daten-Quelle oder -Ziel ist eine oder auch zwei aufeinanderfolgende Speicherzellen. Die Adresse wird dem Befehl in einem Datenbreite: WordsWord Adressierungsarten der Z80: Unmittelbarunmittelbar angehängt. Beispiele sind: 'LD HL,(#8000)', JP #9000 oder 'LD (#FFFF),Operationen: BD5B / 349A / 349A: FLO SUBA'.

Zero-Page

Anhang: Die Z80Die Z80 verfügt über keine spezielle, kurze Adressierung von Speicherzellen in der untersten Speicherseite, also bei Adressen, die sich mit einem Datentypen: Bytes
Datenbreite: Bytes
Byte
darstellen ließen. Sie verfügt nur über eine sogenannte modifizierte Seite-Null Adressierung bei den Besonderheiten der Z80 im Schneider CPC: Restart-Vektoren im Schneider CPCRestart-Vektoren. Das sind Die CPU Z80: Unterprogramm-AufrufeUnterprogramm-Aufrufe, die nur aus einem Datentypen: Bytes
Datenbreite: Bytes
Byte
bestehen und dort Adressierungsarten der Z80: Implizitimplizit (in einem 3-Bit-Adressfeld) 8 verschiedene Einsprungsstellen von 0 bis 56 kodiert haben.

Relativ

Diese Die CPU Z80: Adressierungsarten der Z80Adressierungsart ist in 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
nur für kurze Sprünge implementiert. Dabei wird der Programmzeiger PC um die Adressierungsarten der Z80: Unmittelbarunmittelbar angegebene Adress-Distanz erhöht oder erniedrigt. Dieser Offset ist dabei ein Datentypen: Bytes
Datenbreite: Bytes
Byte
, das bei gesetztem 7. Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
als eine negative Zahl in Komplement-Darstellung interpretiert wird.

Register-indirekt

Als Daten-Ziel oder Quelle dient eine Speicherzelle. Die Adresse ist in einem Adressierungsarten der Z80: Implizitimplizit angegebenen Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
enthalten. Außerdem ist die Adressierungsarten der Z80: Register-indirektRegister-indirekte Adressierung für einen einzigen Sprungbefehl implementiert: 'JP (HL)' bzw. indirekt zu IX oder IY.

Indiziert

Das ist eine Kombination aus Adressierungsarten der Z80: Register-indirektRegister-indirekter und Adressierungsarten der Z80: Relativrelativer Adressierung. Das verwendete Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
(IX oder IY) wird Adressierungsarten der Z80: Implizitimplizit angegeben (oder auch Adressierungsarten der Z80: Unmittelbarunmittelbar, je nach Geschmack). Nach dem Befehlsbyte wird die Adress-Distanz (der Erklärungen zu den Anschlussbezeichnungen: INDEXIndex) Adressierungsarten der Z80: Unmittelbarunmittelbar angegeben. Dieses Datentypen: Bytes
Datenbreite: Bytes
Byte
wird wie bei der relativen Adressierung zum Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
addiert.

Register-indirekt mit postincrement oder predecrement:

Diese wichtige Die CPU Z80: Adressierungsarten der Z80Adressierungsart wird fast immer vergessen, weil ihre Befehle nicht sofort in's Auge springen. Alle Befehle, die eine Adresse oder ein Doppelregister auf den Maschinenstapel 'pushen' oder von diesem 'poppen', verwenden diese Die CPU Z80: Adressierungsarten der Z80Adressierungsart! Hierbei ist Daten-Ziel (beim pushen) bzw. Daten-Quelle (bei poppen) eine Speicherzelle, die durch das SP-Register, also durch den Maschinenstapelzeiger adressiert wird. Das SP-Register taucht im Mnenonic nicht auf, trotzdem verwenden u.Operationen: BD5B / 349A / 349A: FLO SUBA. folgende Befehle diese Die CPU Z80: Adressierungsarten der Z80Adressierungsart: 'PUSH HL', 'POP IX', 'Maschinencode über HIMEM: CALLCALL #BC00', 'RET' 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
 0'.

Alle pushenden Befehle arbeiten mit predecrement. Das heißt, bevor ein Datentypen: Bytes
Datenbreite: Bytes
Byte
SP-Register-indirekt abgespeichert wird, wird dieses erniedrigt. Die poppenden Befehle sind postincrement. Nach jedem SP-Register-indirekten Lesen einer Speicherzelle wird das SP-Register incrementiert. SP-indirekte Adressierung ist nur mit Datenbreite: WordsWords möglich.

Widerspruch !

Falls jemand nicht damit einverstanden ist, die Stack-Operationen als eigene Die CPU Z80: Adressierungsarten der Z80Adressierungsart zuzulassen weil er meint, dann wäre ja auch die Befehlsabarbeitung Adressierungsarten der Z80: Register-indirektRegister-indirekt mit postincrement (Befehlsbyte indirekt zum PC-Register einlesen und den PC erhöhen): Vollkommen richtig! Dem ist so.

Und wenn dieser Jemand nun noch weiter einwendet, dann wäre ja der Adressierungsarten der Z80: Absolutabsolute Sprung 'JP_#BC00' gar nicht als Adressierungsarten der Z80: Absolutabsolute, sondern als Adressierungsarten der Z80: Unmittelbarunmittelbare Adressierung aufzufassen ('JP #BC00' entspricht dann: 'LD PC,#BC00'), kann ich auch dem nicht widersprechen.

Das zeigt alles nur, wie verkorkst diese ganze Unterteilung in verschiedene Die CPU Z80: Adressierungsarten der Z80Adressierungsarten ist.

fehlende Adressierungsarten

Anfangs wurde gesagt, dass man 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
in puncto Die CPU Z80: Adressierungsarten der Z80Adressierungsarten nicht gerade verwöhnt wird. Der direkte Konkurrent 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
, die 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
CPU
6502, hat da wesentlich mehr zu bieten. Im Folgenden also die 'Mängelliste':

Als Erstes muss man zu der doch recht langen Latte möglicher Die CPU Z80: Adressierungsarten der Z80Adressierungsarten anmerken, dass diese oft nur mit starken Einschränkungen in einigen wenigen Befehlen realisiert sind.

So ist die Adressierungsarten der Z80: Relativrelative Adressierung nur für kurze Sprünge vorgesehen. Es ist deshalb nicht möglich, Adressenunabhängige Programme zu schreiben. Dafür müsste die Adressierungsarten der Z80: Relativrelative Adressierung fast überall möglich sein: Weite Sprünge, Die CPU Z80: Unterprogramm-AufrufeUnterprogramm-Aufrufe und Datenzugriff.

Die Verwendung der Adressierungsarten der Z80: Indiziertindizierten Adressierung ist stark eingeschränkt. Das 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
verwendete Verfahren (16-Bit-breite Adressbasis veränderbar in einem Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
plus 8-Bit-breiter Erklärungen zu den Anschlussbezeichnungen: INDEXIndex unveränderbar als Teil des Befehls) ist, gelinde gesagt, ziemlich unpraktisch. Um mittels Adressierungsarten der Z80: Indiziertindizierter Adressierung durch eine Tabelle zu marschieren, wofür man doch eigentlich die Basis festhalten und den Erklärungen zu den Anschlussbezeichnungen: INDEXIndex weiterstellen müsste, muss man es 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
genau umgekehrt machen. Tatsächlich wird deshalb in der taeglichen Praxis fast nur mit dem 'Erklärungen zu den Anschlussbezeichnungen: INDEXIndex' Real: NullNull, oder besser mit überhaupt keinem Indexregister gearbeitet.

Sinnvolles Einsatzgebiet für die Index-Register ist allerdings der Zugriff auf Variablen: lokale Variablenlokale Variablen, wie er im CPC beispielsweise für Speicheraufteilung durch ein Vordergrund-Programm: Hintergrund-ROMsHintergrund-ROMs praktiziert wird.

Bei der Adressierungsarten der Z80: Register-indirektRegister-indirekten Adressierung sind keine Word-Zugriffe möglich.

Adressierungsarten der Z80: Register-indirektRegister-indirekte Adressierung mit postincrement und predecrement beschränkt sich auf die jeweiligen Spezialbefehle. Allgemein für beliebige Doppelregister (oder wenigstens für eins!) gibt es diese Art nicht. Dabei wäre das so praktisch, um in Übergabe von Argumenten und Ergebnissen: FORTH:FORTH oder einer anderen Sprachen einen getrennten Datenstapel zu verwirklichen.

Möglichkeiten, mit verkürzten Befehlen auf die Adressierungsarten der Z80: Zero-PageZero-Page zuzugreifen, Der Linien-Algorithmus: Fehler 3fehlen völlig.

Indirekte Adressierung, bei der zwei Adressierungsarten der Z80: Register-indirektRegister-indirekt oder Adressierungsarten der Z80: Absolutabsolut angezeigte Speicherzellen als Zeiger auf die eigentliche Daten-Quelle oder -Ziel deuten, Der Linien-Algorithmus: Fehler 3fehlen ebenfalls.

Valid HTML   Valid CSS