Kurze Übersicht über die Befehle des Z80
Abkürzungen:
r,r' - Einfachregister A, B, C, D, E, H, L
dd -
qq - Doppelregister AF, BC, DE, HL
pp -
n - 8-Bit-Konstante
nn - 16-Bit-Konstante, Adresse
d - Verschiebung bei Adressierung über Indexregister, im Bereich -128 d
b - Bit, das in den Einzelbitbefehlen behandelt werden soll 0 b
m,M - Inhalt der 8-Bit-Speicherstelle, die durch HL adressiert wird (L enthält Bits 0-7 ; H Bits 8-15)
p - einer der Werte 00h, 08h, 10h, 18h, 20h, 28h, 30h, 38h
CY - Carry-Flag
T - Anzahl der Taktzyklen des Befehls
Bei Befehlen, die Flag-Bedingungen für Programmsprünge auswerten, sind 2 Taktzyklen angegeben. Die erste Zahl bezieht sich auf den Fall, daß der Sprung ausgeführt, die zweite dafür, daß kein Sprung ausgeführt wird und am nächsten im Speicher stehenden Befehl weitergearbeitet wird. Die Beeinflussung der Flags durch die Befehle wird hinten beschrieben.
8-Bit-Ladebefehle:
Die Ladebefehle transportieren 8-Bit-Daten intern zwischen Registern oder zwischen Registern und dem Speicher. Dabei steht im Operandenfeld als erstes der Zielspeicherplatz und danach (durch Komma getrennt) der Quellenspeicherplatz. Der Inhalt des Quellenspeicherplatzes wird bei diesen Befehlen nicht verändert.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
LD r,r' |
|
der Inhalt des Registers r' wird in das Register r geladen |
|
LD r,n |
|
die 8-Bit-Konstante n wird im Register r gespeichert |
|
LD r,m |
|
der Inhalt des durch HL adressierten Speicherplatzes wird in das Register r geladen |
|
LD r,(IX+d) LD r,(IY+d) |
|
der Inhalt des durch IX (oder IY) plus Verschiebung d adressierten Speicherplatzes wird in das Register r geladen |
|
LD m,r |
|
der Inhalt des Registers r wird in den durch HL adressierten Speicherplatz geladen |
|
LD (IX+d),r LD (IY+d),r |
|
der Inhalt des Registers r wird in den durch IX (oder IY) plus Verschiebung d adressierten Speicherplatz geladen |
|
LD m,n |
|
die Konstante n wird in den durch HL adressierten Speicherplatz geladen |
|
LD (IX+d),n LD (IY+d),n |
|
die Konstante n wird in den durch IX (oder IY) plus Verschiebung d adressierten Speicherplatz geladen |
|
LD A,(BC) LD A,(DE) |
|
der Inhalt des durch BC (oder DE) adressierten Speicherplatzes wird in den Akkumulator (A-Register) geladen |
|
LD A,(nn) |
|
der Inhalt des Speicherplatzes nn wird in den Akkumulator (A-Register) geladen |
|
LD (BC),A LD (DE),A |
|
der Inhalt des Akkumulators (A-Register) wird in den durch BC (oder DE) adressierten Speicherplatz geladen |
|
LD (nn),A |
|
der Inhalt des Akkumulators (A-Register) wird an die Stelle des Speicherplatzes nn geladen |
|
LD A,I |
|
der Inhalt des Interruptregisters I wird in den Akkumulator (A-Register) geladen |
**0F0- |
LD A,R |
|
der Inhalt des Refreshregisters R wird in den Akkumulator (A-Register) geladen |
**0F0- |
LD I,A |
|
der Inhalt des Akkumulators (A-Register) wird in das Interruptregister I geladen |
|
LD R,A |
|
der Inhalt des Akkumulators (A-Register) wird in das Refreshregister R geladen |
|
16-Bit-Ladebefehle:
Die Ladebefehle transportieren 16-Bit-Daten intern zwischen Registern oder zwischen Registern und dem Speicher. Dabei steht im Operandenfeld als erstes der Zielspeicherplatz und danach (durch Komma getrennt) der Quellenspeicherplatz. Der Inhalt des Quellenspeicherplatzes wird bei diesen Befehlen nicht verändert. Spezielle 16-Bit-befehle sind die PUSH- und POP-Befehle. Mit ihnen werden 16-Bit-Daten aus Doppelregistern in den Kellerspeicher (Stack) gebracht bzw. zurück in die Doppelregister geholt.
Alle 16-Bit-Daten werden grundsätzlich in der Intel-Order (niederwertiges Byte zuerst) gespeichert.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
LD dd,nn |
|
die Konstante nn wird in das Doppelregister geladen |
|
LD IX,nn LD IY,nn |
|
die Konstante nn wird in das Indexregister IX (oder IY) geladen |
|
LD HL,(nn) |
|
der Inhalt der Speicherplätze nn und nn+1 wird in das Doppelregister HL geladen (nn L, nn+1 H) |
|
LD pp,(nn) |
|
der Inhalt der Speicherplätze nn und nn+1 wird in das Doppelregister pp geladen (nn niederwertig, nn+1 höherw.) |
|
LD IX,(nn) LD IY,(nn) |
|
der Inhalt der Speicherplätze nn und nn+1 wird in das Doppelregister IX (oder IY) geladen (nn X (oder Y), nn+1 I) |
|
LD (nn),HL |
|
der Inhalt des Doppelregisters HL wird an die Adressen nn und nn+1 geladen (L nn, H nn+1) |
|
LD (nn),pp |
|
der Inhalt des Doppelregisters pp wird an die Adressen nn und nn+1 geladen (niederwertig nn, höherwertig nn+1) |
|
LD (nn),IX LD (nn),IY |
|
der Inhalt des Doppelregisters IX (oder IY) wird an die Adressen nn und nn+1 geladen (X (oder Y) nn, I nn+1) |
|
LD SP,HL |
|
der Inhalt des Doppelregisters HL wird im Stackpointer SP gespeichert |
|
LD SP,IX LD SP,IY |
|
der Inhalt des Doppelregisters IX (oder IY) wird im Stackpointer SP gespeichert |
|
PUSH qq |
|
der Inhalt des Doppelregisters qq wird im Stack gespeichert DEC SP; LD (SP),H; DEC SP; LD (SP),L |
|
PUSH IX PUSH IY |
|
der Inhalt des Doppelregisters IX (oder IY) wird im Stack gespeichert DEC SP; LD (SP),I; DEC SP; LD (SP),X |
|
POP qq |
|
der letzte Wert im Stack wird in das Doppelregister qq geladen LD L,(SP); INC SP; LD H,(SP); INC SP |
|
POP IX POP IY |
|
der letzte Wert im Stack wird in das Doppelregister IX (oder IY) geladen LD X,(SP); INC SP; LD I,(SP); INC SP |
|
8-Bit-Arithmetik und Logikbefehle
Diese Befehle arbeiten mit Daten, die sich im Akkumulator (Register A als ersten Operanden) und mit Daten in anderen Registern oder auf Speicherplätzen (als zweiten Operanden) befinden. Das Ergebnis dieser Operantionen wird im Akkumulator (A-Register) abgelegt.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
ADD r |
|
der Inhalt des Registers r wird zum Akkumulatorinhalt addiert |
***V0* |
ADD m |
|
der Inhalt des durch das Register HL adressierten Speicherplatzes m wird zum Akkumulatorinhalt addiert |
***V0* |
ADD n |
|
die Konstante n wird zum Akkumulatorinhalt addiert |
***V0* |
ADD (IX+d) ADD (IY+d) |
|
der Inhalt des durch das Register IX (oder IY) plus Verschiebung adressierten Speicherplatzes wird zum Akkumulatorinhalt addiert |
***V0* |
ADC r |
|
der Inhalt des Registers r plus Carry-Flag wird zum Akkumulatorinhalt addiert |
***V0* |
ADC m |
|
der Inhalt des durch HL adressierten Speicherplatzes m plus Carry-Flag wird zum Akkumulatorinhalt addiert |
***V0* |
ADC n |
|
die Konstante n plus Carry-Flag wird zum Akkumulatorinhalt addiert |
***V0* |
ADC (IX+d) ADC (IY+d) |
|
der Inhalt des durch das Register IX (oder IY) plus Verschiebung plus Carry-Flag adressierten Speicherplatzes wird zum Akkumulatorinhalt addiert |
***V0* |
SUB r |
|
der Inhalt des Registers r wird vom Akkumulatorinhalt subtrahiert |
***V1* |
SUB m |
|
der Inhalt des durch das Register HL adressierten Speicherplatzes m wird vom Akkumulatorinhalt subtrahiert |
***V1* |
SUB n |
|
die Konstante n wird vom Akkumulatorinhalt subtrahiert |
***V1* |
SUB (IX+d) SUB (IY+d) |
|
der Inhalt des durch das Register IX (oder IY) plus Verschiebung adressierten Speicherplatzes wird vom Akkumulatorinhalt subtrahiert |
***V1* |
SBC r |
|
der Inhalt des Registers r plus Carry-Flag wird vom Akkumulatorinhalt subtrahiert |
***V1* |
SBC m |
|
der Inhalt des durch HL adressierten Speicherplatzes m plus Carry-Flag wird vom Akkumulatorinhalt subtrahiert |
***V1* |
SBC n |
|
die Konstante n plus Carry-Flag wird vom Akkumulatorinhalt subtrahiert |
***V1* |
SBC (IX+d) SBC (IY+d) |
|
der Inhalt des durch das Register IX (oder IY) plus Verschiebung plus Carry-Flag adressierten Speicherplatzes wird vom Akkumulatorinhalt subtrahiert |
***V1* |
AND r AND m AND n AND (IX+d) AND (IY+d) |
|
logische UND-Verknüpfung mit dem Inhalt eines Registers, Speicherbytes oder Konstanten und dem Akkumulatorinhalt es wird bitweise konjunktiv verknüpft (nur dann 1, wenn beide Bits 1 sind) |
**1P00 **1P00 **1P00 **1P00 **1P00 |
OR r OR m OR n OR (IX+d) OR (IY+d) |
|
logische ODER-Verknüpfung mit dem Inhalt eines Registers, Speicherbytes oder Konstanten und dem Akkumulatorinhalt es wird bitweise disjunktiv verknüpft (nur dann 0, wenn beide Bits 0 sind) |
**0P00 **0P00 **0P00 **0P00 **0P00 |
XOR r XOR m XOR n XOR (IX+d) XOR (IY+d) |
|
Exclusiv-ODER-Verknüpfung mit dem Inhalt eines Registers, Speicherbytes oder Konstanten und dem Akkumulatorinhalt es wird bitweise exklusiv verknüpft (nur dann 1, wenn ein Bit 0 und das andere 1 ist) |
**0P00 **0P00 **0P00 **0P00 **0P00 |
CP r CP m CP n CP (IX+d) CP (IY+d) |
|
Vergleich vom Inhalt eines Registers, Speicherbytes oder Konstanten mit dem Akkumulatorinhalt Zero-Flag: 1 beide Inhalte sind gleich; 0 Inhalte sind unterschiedlich Carry-Flag: 1 Akkumulatorinhalt ist kleiner zweitem Operanden; 0 Akkumulator ist größer oder gleich zweiten Operanden |
***V1* ***V1* ***V1* ***V1* ***V1* |
INC r |
|
der Inhalt des Registers r wird um eins erhöht |
***V0- |
INC m |
|
der Inhalt des durch HL adressierten Speicherplatzes m wird um eins erhöht |
***V0- |
INC (IX+d) INC (IY+d) |
|
der Inhalt des durch das Register IX (oder IY) plus Verschiebung adressierten Speicherplatzes wird um eins erhöht |
***V0- |
DEC r |
|
der Inhalt des Registers r wird um eins vermindert |
***V1- |
DEC m |
|
der Inhalt des durch HL adressierten Speicherplatzes m wird um eins vermindert |
***V1- |
DEC (IX+d) DEC (IY+d) |
|
der Inhalt des durch das Register IX (oder IY) plus Verschiebung adressierten Speicherplatzes wird um eins vermindert |
***V1- |
DAA |
|
korrigiert nach Addition / Subtraktion zweier gepackter BCD-Zahlen den Akkumulatorinhalt so, daß im Akkumulator wieder die gepackte BCD-Darstellung erreicht wird |
***P-* |
CPL |
|
bitweises Negieren (Komplementieren) des Akkumulatorinhalts (1er-Komplement) |
|
NEG |
|
subtrahieren des Akkumulatorinhalts von Null (2er-Komplement, bitweises Negieren aller Bits, dann um 1 erhöhen) |
***V1* |
CCF |
|
Komplementieren des Carry-Flags |
--x-0* |
SCF |
|
Setzen des Carry-Flags auf 1 |
|
16-Bit-Arithmetikbefehle
Diese Befehle arbeiten ähnlich den 8-Bit-Arithmetikbefehlen, jedoch mit Doppelregistern. Als 'Akkumulator' wird eines der Doppelregister HL, IX oder IY benutzt.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
ADD HL,dd |
|
der Inhalt des Registerspaares dd wird zum Inhalt des Registerpaares HL addiert |
--x-0* |
ADD IX,IX ADD IY,IY |
|
der Inhalt des Registerspaares IX (oder IY) wird mit sich selbst addiert (Verdopplung) |
--x-0* |
ADD IX,pp ADD IY,pp |
|
der Inhalt von pp wird zum Inhalt des Registerpaares IX (oder IY) addiert |
--x-0* |
ADC HL,dd |
|
der Inhalt des Registerspaares dd plus Carry-Flag wird zum Inhalt des Registerpaares HL addiert |
**xV0* |
SBC HL,dd |
|
der Inhalt des Registerspaares dd plus Carry-Flag wird vom Inhalt des Registerpaares HL subtrahiert |
**xV1* |
INC dd |
|
der Inhalt des Doppelregisters dd wird um eins erhöht |
|
INC IX INC IY |
|
der Inhalt des Doppelregisters IX (oder IY) wird um eins erhöht |
|
DEC dd |
|
der Inhalt des Doppelregisters dd wird um eins vermindert |
|
DEC IX DEC IY |
|
der Inhalt des Doppelregisters IX (oder IY) wird um eins vermindert |
|
Registeraustauschbefehle
Diese Befehle dienen dem schnellen Austausch von Doppelregisterinhalten und erschliessen dem Programmierer die Hintergrundregister.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
EX DE,HL |
|
Austausch des Inhalts der Doppelregister DE und HL |
|
EX AF,AF' |
|
Austausch des Inhalts der Doppelregister AF und AF' |
|
EXX |
|
Austausch des Inhalts der Doppelregister BC BC' DE DE' HL HL' |
|
EX (SP),HL |
|
Austausch des Inhalts des Doppelregisters mit dem letzten Wert im Stack (SP+1) H (SP) L |
|
EX (SP),IX EX (SP),IY |
|
Austausch des Inhalts des Doppelregisters mit dem letzten Wert im Stack (SP+1) I (SP) X (oder Y) |
|
Programmverzweigungsbefehle
Es muß zwischen unbedingten und bedingten Sprüngen unterschieden werden. Weiterhin sind absolute und relative Sprünge mögich. Die relativen Sprünge sind nur in einer Umgebung von -126 bis +129 Byte möglich. Bei bedingten Sprüngen sind die Flag-Bedngungen als Operanden anzugeben und es werden die entsprechenden Flag-Bits getestet. In Abhängigkeit von diesem Test wird der Sprung ausgeführt oder ignoriert.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
JP nn |
|
unbedingter Sprung nach Adresse nn |
|
JP NZ,nn |
|
Sprung nach Adresse nn, wenn das Zero-Flag gleich 0 ist |
|
JP Z,nn |
|
Sprung nach Adresse nn, wenn das Zero-Flag gleich 1 ist |
|
JP NC,nn |
|
Sprung nach Adresse nn, wenn das Carry-Flag gleich 0 ist |
|
JP C,nn |
|
Sprung nach Adresse nn, wenn das Carry-Flag gleich 1 ist |
|
JP PO,nn |
|
Sprung nach Adresse nn, wenn das P/V-Flag gleich 0 ist |
|
JP PE,nn |
|
Sprung nach Adresse nn, wenn das P/V-Flag gleich 1 ist |
|
JP P,nn |
|
Sprung nach Adresse nn, wenn das Sign-Flag gleich 0 ist |
|
JP M,nn |
|
Sprung nach Adresse nn, wenn das Sign-Flag gleich 1 ist |
|
JR nn |
|
relativer unbedingter Sprung nach Adresse nn |
|
JR NZ,nn |
|
relativer Sprung nach Adresse nn, wenn das Zero-Flag gleich 0 ist |
|
JR Z,nn |
|
relativer Sprung nach Adresse nn, wenn das Zero-Flag gleich 1 ist |
|
JR NC,nn |
|
relativer Sprung nach Adresse nn, wenn das Carry-Flag gleich 0 ist |
|
JR C,nn |
|
relativer Sprung nach Adresse nn, wenn das Carry-Flag gleich 1 ist |
|
JP m |
|
unbedingter Sprung zu der Adresse, die im Doppelregister HL steht |
|
JP (IX) JP (IY) |
|
unbedingter Sprung zu der Adresse, die im Doppelregister IX (oder IY) steht |
|
DJNZ nn |
|
der Inhalt des Registers B wird um eine vermindert, relative bedingter Sprung zur Adresse nn, wenn B <> 0 |
|
Unterprogrammbefehle
Es ist wie bei den Sprungbefehlen zwischen bedingten und unbedingten Befehlen zu unterscheiden. Der Unterprogrammaufruf erfolgt mit der Speicherung der dem CALL-Befehl folgenden Adresse (Rückkehradresse) auf dem Stack. Wird das Unterprogramm mit dem RET-Befehl abgeschlossen, so wird das Programm ab der Rückkehradresse weiter abgearbeitet, in dem die Adresse vom Stack zurückgeladen wird.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
CALL nn |
|
unbedingter Unterprogrammaufruf zur Adresse nn |
|
CALL NZ,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das Zero-Flag gleich 0 ist |
|
CALL Z,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das Zero-Flag gleich 1 ist |
|
CALL NC,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das Carry-Flag gleich 0 ist |
|
CALL C,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das Carry-Flag gleich 1 ist |
|
CALL PO,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das P/V-Flag gleich 0 ist |
|
CALL PE,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das P/V-Flag gleich 1 ist |
|
CALL P,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das Sign-Flag gleich 0 ist |
|
CALL M,nn |
|
Unterprogrammaufruf zur Adresse nn, wenn das Sign-Flag gleich 1 ist |
|
RST p |
|
der RST-Befehl ist ein spezieller Unterprogrammaufruf, es sind 8 folgende Restart-Adressen zugelassen: p = 00h,08h,10h,18h,20h,28h,30h,38h der höherwertige Adressteil ist stets Null, ansonsten entspricht der RST-Befehl einem unbedingten Unterprogrammaufruf |
|
RET |
|
unbedingter Rücksprung aus einem Unterprogramms die Ausführung erfolgt, in dem die Rückkehradresse wie bei einem POP-Befehl aus dem Stack geholt wird und von dieser Adresse weiterbearbeitet wird |
|
RET NZ |
|
bedingter Rücksprung, wenn das Zero-Flag gleich 0 ist |
|
RET Z |
|
bedingter Rücksprung, wenn das Zero-Flag gleich 1 ist |
|
RET NC |
|
bedingter Rücksprung, wenn das Carry-Flag gleich 0 ist |
|
RET C |
|
bedingter Rücksprung, wenn das Carry-Flag gleich 1 ist |
|
RET PO |
|
bedingter Rücksprung, wenn das P/V-Flag gleich 0 ist |
|
RET PE |
|
bedingter Rücksprung, wenn das P/V-Flag gleich 1 ist |
|
RET P |
|
bedingter Rücksprung, wenn das Sign-Flag gleich 0 ist |
|
RET M |
|
bedingter Rücksprung, wenn das Sign-Flag gleich 1 ist |
|
RETI |
|
Rücksprung aus Interruptbehandlungsroutine (ISR) eines maskierbaren Interrupts |
|
RETN |
|
Rücksprung aus Interruptbehandlungsroutine (ISR) eines nicht maskierbaren Interrupts |
|
Rotations- und Verschiebebefehle
Durch diese Befehle wird die Möglichkeit gegeben, im Akkumulator (A-Register), in einem anderen Register oder in einem Speicherplatz Daten einfach zyklisch (bitweise) zu verschieben. Das aus dem Byte herausgeschobene Bit wird im Carry-Flag abgelegt.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
RLCA |
|
Linksrotation des Akkumulatorinhalts um eine Bitposition nach links, Bit 7 wird zum Inhalt von Bit 0 |
|
RRCA |
|
Rechtsrotation des Akkumulatorinhalts um eine Bitposition nach rechts, Bit 0 wird zum Inhalt von Bit 7 |
|
RLA |
|
Linksrotation des Akkumulatorinhalts um eine Bitposition nach links durch das Carry-Flag, Bit 7 wird zum Inhalt des Carry-Flags und dessen alter Inhalt zum Bit 0 |
|
RRA |
|
Rechtsrotation des Akkumulatorinhalts um eine Bitposition nach rechts durch das Carry-Flag, Bit 0 wird zum Inhalt des Carry-Flags und dessen alter Inhalt zum Bit 7 |
|
RLC r RLC m RLC (IX+d) RLC (IY+d) |
|
Linksrotation des Registers oder Speicherbytes um eine Bitposition nach links, Bit 7 wird zum Inhalt von Bit 0 (analog RLCA) |
**0P0* **0P0* **0P0* **0P0* |
RRC r RRC m RRC (IX+d) RRC (IY+d) |
|
Rechtsrotation des Registers oder Speicherbytes um eine Bitposition nach rechts, Bit 0 wird zum Inhalt von Bit 7 (analog RRCA) |
**0P0* **0P0* **0P0* **0P0* |
RL r RL m RL (IX+d) RL (IY+d) |
|
Linksrotation des Registers oder Speicherbytes um eine Bitposition nach links durch das Carry-Flag, Bit 7 wird zum Inhalt des Carry-Flags und dessen alter Inhalt zum Bit 0 (analog RLA) |
**0P0* **0P0* **0P0* **0P0* |
RR r RR m RR (IX+d) RR (IY+d) |
|
Rechtsrotation des Registers oder Speicherbytes um eine Bitposition nach rechts durch das Carry-Flag, Bit 0 wird zum Inhalt des Carry-Flags und dessen alter Inhalt zum Bit 7 (analog RRA) |
**0P0* **0P0* **0P0* **0P0* |
SLA r SLA m SKA (IX+d) SLA (IY+d) |
|
Linksverschiebung eines Registers oder Speicherbytes um ein Bit durch das Carry-Flag. Das Bit 0 wird 0. |
**0P0* **0P0* **0P0* **0P0* |
SRA r SRA m SRA (IX+d) SRA (IY+d) |
|
Rechtsverschiebung eines Registers oder Speicherbytes um ein Bit durch das Carry-Flag. Der Inhalt von Bit 7 bleibt erhalten. |
**0P0* **0P0* **0P0* **0P0* |
RLD |
|
zyklische Verschiebung nach links zwischen dem Akkumulator und dem Inhalt des durch HL adressiertem Speicherplatzes (m). Die unteren 4 Bit von m werden in die oberen 4 Bitstellen übertragen und diese ihrerseits in die unteren 4 Bits des Akkumulators. Die unteren 4 Bits des Akkumulators werden in die unteren 4 Bitstellen von m transportiert. Die oberen 4 Bits des Akkumulators bleiben unverändert. |
**0P0- |
RRD |
|
zyklische Verschiebung nach rechts zwischen dem Akkumulator und dem Inhalt des durch HL adressiertem Speicherplatzes (m). Die unteren 4 Bit von m werden in die unteren 4 Bitstellen des Akkumulators übertragen und diese ihrerseits in die oberen 4 Bits von m. Die oberen 4 Bits von m werden in die unteren transportiert. Die oberen 4 Bits des Akkumulators bleiben unverändert. |
**0P0- |
Einzelbitbefehle
Diese Befehle erlauben es, einzelne Bits in Registern oder auf Speicherplätzen zu testen, zu setzen oder zu löschen.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
BIT b,r |
|
die durch b gekennzeichnete Bitposition wird in dem Register r getestet. Das Komplement steht im Zero-Flag. |
X*1x0- |
BIT b,m |
|
die durch b gekennzeichnete Bitposition wird in der Speicherstelle m getestet. Das Komplement steht im Zero-Flag. |
X*1x0- |
BIT b,(IX+d) BIT b,(IY+d) |
|
die durch b gekennzeichnete Bitposition wird in der Speicherstelle getestet. Das Komplement steht im Zero-Flag. |
X*1x0- |
SET b,r |
|
die durch b gekennzeichnete Bitposition wird in dem Register r auf 1 gesetzt. |
|
SET b,m |
|
die durch b gekennzeichnete Bitposition wird in der Speicherstelle m auf 1 gesetzt. |
|
SET b,(IX+d) SET b,(IY+d) |
|
die durch b gekennzeichnete Bitposition wird in der Speicherstelle auf 1 gesetzt. |
|
RES b,r |
|
die durch b gekennzeichnete Bitposition wird in dem Register r auf 0 zurückgesetzt. |
|
RES b,m |
|
die durch b gekennzeichnete Bitposition wird in der Speicherstelle m auf 0 zurückgesetzt. |
|
RES b,(IX+d) RES b,(IY+d) |
|
die durch b gekennzeichnete Bitposition wird in der Speicherstelle auf 0 zurückgesetzt. |
|
CPU-Steuerbefehle
Diese Befehle diesen der Steuerung des Interruptsystems der CPU.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
NOP |
|
die CPU führt keine Operation aus, es werden aber Refreshzyklen erzeugt |
|
HALT |
|
die CPU führt so lang eine Folge von NOP-Befehlen aus, bis ein Interrupt oder RESET an der CPU aktiv wird. |
|
DI |
|
der maskierbare Interrupt wird durch Rücksetzen der Interruptfreigabe-Flipflops IFF1 und IFF2 gesperrt. Nichtmaskierbare Interrupts werden anerkannt. |
|
EI |
|
der maskierbare Interrupt wird durch Setzen der Interruptfreigabe-Flipflops IFF1 und IFF2 freigegeben. Während der Ausführung dieses Befehls akzeptiert die CPU keine Interruptanforderungen. |
|
IM 0 |
|
CPU in Interruptmodus 0 bringen |
|
IM 1 |
|
CPU in Interruptmodus 1 bringen |
|
IM 2 |
|
CPU in Interruptmodus 2 bringen |
|
Blocktransfer- und -suchbefehle
Mit einem einzigen Befehl können beliebig große Datenmengen im Speicher kopiert werden bzw. es kann in einem Speicherbereich nach einem Datenbyte gesucht werden. Die Suche wird beendet, wenn das Byte gefunden oder das Ende des Speicherbereichs erreicht wurde.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
LDI |
|
Kopiert ein Datenbyte von der Speicherstelle, die durch HL adressiert wird, an die Speicherstelle, die durch DE adressiert wird. Die Register DE und HL werden um eins erhöht, das Register BC um eins vermindert. BC = 0 PV = 0 BC <> 0 PV = 1 |
|
LDIR |
|
kopiert mehrere Datenbytes durch Ausführung des Befehls LDI Wiederholung des Befehls, bis BC = 0 ist |
|
LDD |
|
Kopiert ein Datenbyte von der Speicherstelle, die durch HL adressiert wird, an die Speicherstelle, die durch DE adressiert wird. Die Register DE, HL und BC werden um eins vermindert. BC = 0 PV = 0 BC <> 0 PV = 1 |
|
LDDR |
|
kopiert mehrere Datenbytes durch Ausführung des Befehls LDD Wiederholung des Befehls, bis BC = 0 ist |
|
CPI |
|
Vergleich des Inhalts des durch HL adressierten Speicherplatzes mit dem Inhalt des Akkumulators (A-Register) A = (HL) Z = 1 A <> (HL) Z = 0 anschließend wird das Register HL um eins erhöht und das Register BC um eins vermindert BC = 0 PV = 0 BC <> 0 PV = 1 |
|
CPIR |
|
vergleicht mehrere Datenbytes durch Ausführung des Befehls CPI Wiederholung des Befehls, bis BC = 0 oder A = (HL) ist |
|
CPD |
|
Vergleich des Inhalts des durch HL adressierten Speicherplatzes mit dem Inhalt des Akkumulators (A-Register) A = (HL) Z = 1 A <> (HL) Z = 0 anschließend wird das Register HL und BC um eins vermindert BC = 0 PV = 0 BC <> 0 PV = 1 |
|
CPDR |
|
vergleicht mehrere Datenbytes durch Ausführung des Befehls CPD Wiederholung des Befehls, bis BC = 0 oder A = (HL) ist |
|
Ein- und Ausgabebefehle
Mit diesen Befehlen können Datenbytes zwischen Registern oder Speicheradressen und externen Bausteinen ausgetauscht werden. Der externe Baustein wird dabei über eine sogenannte Portadresse (8-Bit-Wert) angesprochen. Diese Portadresse wird je nach Befehl entweder direkt angegeben (als Konstante) oder muß im Register C zur Verfügung stehen. Ahnlich den Blocktransferbefehlen existieren auch hier Befehle für die Datenein- und -ausgabe ganzer Speicherbereiche.
Wird für die Adressierung das Register C benutzt, liegt der Inhalt des Registers B an den höherwertigen 8 Bits des Adressbusses an.
Mnemonik |
T |
Wirkungsweise des Befehls |
SZHPNC |
IN A,(n) |
|
die Eingabekanaladresse wird mit der Konstante n eingestellt; Zielregister ist der Akkumulator (n) A |
|
IN r,(C) |
|
die Eingabekanaladresse wird indirekt mit dem Register C eingestellt; Zielregister ist r (C) r |
**0P0- |
INI |
|
die Eingabekanaladresse wird mit der Konstante n eingestellt; Zielregister ist der durch HL adressierte Speicherplatz B wird um eins vermindert und HL um eins erhöht (C) (HL) B-1 B B=0? Z=1 sonst Z=0 HL+1 HL |
x*xx1- |
INIR |
|
wiederholte Ausführung des Befehls INI, bis das Register B gleich Null ist |
x1xx1- |
IND |
|
die Eingabekanaladresse wird mit der Konstante n eingestellt; Zielregister ist der durch HL adressierte Speicherplatz B und HL wird um eins vermindert (C) (HL) B-1 B B=0? Z=1 sonst Z=0 HL-1 HL |
x*xx1- |
INDR |
|
wiederholte Ausführung des Befehls IND, bis das Register B gleich Null ist |
x1xx1- |
OUT (n),A |
|
die Ausgabekanaladresse wird mit der Konstante n eingestellt; Quellregister ist der Akkumulator A (n) |
|
OUT (C),r |
|
die Ausgabekanaladresse wird indirekt mit dem Register C eingestellt; Quellregister ist r r (C) |
|
OUTI |
|
die Ausgabekanaladresse wird mit der Konstante n eingestellt; Quellregister ist der durch HL adressierte Speicherplatz; B wird um eins vermindert und HL um eins erhöht (HL) (C) B-1 B B=0? Z=1 sonst Z=0 HL+1 HL |
x*xx1- |
OTIR |
|
wiederholte Ausführung des Befehls OUTI, bis das Register B gleich Null ist |
x1xx1- |
OUTD |
|
die Ausgabekanaladresse wird mit der Konstante n eingestellt; Quellregister ist der durch HL adressierte Speicherplatz; B und HL wird um eins vermindert (HL) (C) B-1 B B=0? Z=1 sonst Z=0 HL-1 HL |
x*xx1- |
OTDR |
|
wiederholte Ausführung des Befehls OUTD, bis das Register B gleich Null ist |
x1xx1- |