Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier.


Rotations- und Schiebebefehle

Rotations- und Schiebebefehle verschieben die einzelnen Bits in einem Register um jeweils n Stellen nach links (zu höherwertigen Stellen) oder rechts (zu niederwertigen Stellen). Je nachdem, was mit den Randbits geschieht, unterscheidet man unter schiedliche Typen von Befehlen: Rotation mit und ohne Carry-Flag, logisches Schieben und arithmetisches Schieben. Beim arithmetischen Schieben bleibt das Vorzeichen einer Zahl, die im Zweierkomplement dargestellt ist, erhalten. Je nach Art des verwendeten Mikroprozessors können die Bits pro Schiebeoperation um eine oder auch mehrere Binärstellen verschoben werden. Die Z80-CPU ermöglicht nur Schiebe- und Rotationsoperationen um jeweils eine Binärstelle, wobei zwei spezielle Befehle existieren (RLD, RRD), die jeweils 4-Bit-Bewegungen ermöglichen. Die Abbildung zeigt eine Zusammenfassung aller Typen von Schiebe- und Rotationsoperationen der Z80.

Zusammenfassung der Schiebe- und Rotationsbefehle
Befehl Kurzbeschreibung Erläuterung Flags

RLCA

Rotation nach links.

Der Inhalt des Akkumulators wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird.

H=0

N=0

C = Bit 7 des Akkumulators

alle anderen Flags bleiben unverändert

RLA

Rotation nach links über Carry-Flag.

Der Inhalt des Akkumulators wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 7 des Akkumulators

alle anderen Flags bleiben unverändert

RRCA

Rotation nach rechts.

Der Inhalt des Akkumulators wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7übertragen wird.

H=0

N=0

C = Bit 0 des Akkumulators

alle anderen Flags bleiben unverändert

RRA

Rotation nach rechts über Carry-Flag.

Der Inhalt des Akkumulators wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 0 des Akkumulators

alle anderen Flags bleiben unverändert

RLC r

Rotation nach links.

Der Inhalt des Registers r wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird.

H=0

N=0

C = Bit 7 des Registers r

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RLC (HL)

Rotation nach links.

Der Inhalt der durch das Register HL adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird.

H=0

N=0

C = Bit 7 der Speicherzelle (HL)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RLC (IX+dd)

RLC (IY+dd)

Rotation nach links.

 

Der Inhalt der durch IX+dd bzw. IY+dd adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 sowohl in das Carry-Flag als auch in Bit 0 übertragen wird.

H=0

N=0

C = Bit 7 von (IX+dd) bzw. (IY+dd)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RL r

Rotation nach links über Carry-Flag.

Der Inhalt des Registers r wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 7 des Registers r

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RL (HL)

Rotation nach links über Carry-Flag.

Der Inhalt der durch HL adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 7 der Speicherzelle (HL)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RL (IX+dd)

RL (IY+dd)

Rotation nach links über Carry-Flag.

Der Inhalt der durch IX+dd bzw. IY+dd adressierten Speicherzelle wird um eine Stelle nach links verschoben, wobei Bit 7 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 0. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 7 der Speicherzelle (IX+dd) bzw. (IY+dd)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RRC r

Rotation nach rechts.

Der Inhalt des Registers r wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7 übertragen wird.

H=0

N=0

C = Bit 0 des Registers r

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RRC (HL)

Rotation nach rechts.

Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7 übertragen wird.

H=0

N=0

C = Bit 0 der Speicherzelle (HL)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RRC (IX+dd)

RRC (IY+dd)

Rotation nach rechts.

 

Der Inhalt der Speicherzelle, die durch (IX+dd) bzw. durch(IY+dd) adressiert wird, wird um eine Stelle nach rechts verschoben, wobei Bit 0 sowohl in das Carry-Flag als auch in Bit 7übertragen wird.

H=0

N=0

C = Bit 0 der Speicherzelle (IX+dd) bzw. (IY+dd)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RR r

Rotation nach rechts über Carry-Flag.

Der Inhalt des Registers r wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 0 des Registers r

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RR (HL)

Rotation nach rechts über Carry-Flag.

Der Inhalt der durch HL adressierten Speicherzelle wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 0 der Speicherzelle (HL)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RR (IX+dd)

RR (IY+dd)

Rotation nach rechts über Carry-Flag.

 

Der Inhalt der durch IX+dd bzw. IY+dd adressierten Speicherzelle wird um eine Stelle nach rechts verschoben, wobei Bit 0 in das Carry-Flag übertragen wird und das Carry-Flag in Bit 7. Dieser Rotationsbefehl schließt also das Carry-Flag ein (Rotation über neun Bits).

H=0

N=0

C = Bit 0 von (IX+dd) bzw. (IY+dd)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SLA r

Arithmetisches Schieben nach links.

Der Inhalt des Registers r wird um eine Binärstelle nach links verschoben, wobei Bit 0 mit null aufgefüllt wird und Bit 7 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 7 des Registers r

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SLA (HL)

Arithmetisches Schieben nach links.

Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Binärstelle nach links verschoben, wobei Bit 0 mit null aufgefüllt wird und Bit 7 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 7 der Speicherzelle (HL)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SLA (IX+dd)

SLA (IY+dd)

Arithmetisches Schieben nach links.

 

Der Inhalt der Speicherzelle, die durch (IX+dd) bzw. (IY+dd) adressiert wird, wird um eine Binärstelle nach links verschoben, wobei Bit 0 mit null aufgefüllt wird und Bit 7 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 7 der Speicherzelle (IX+dd) bzw. (IY+dd)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SRA r

Arithmetisches Schieben nach rechts.

Der Inhalt des Registers r wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 dupliziert wird und Bit 0 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 0 des Registers r

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SRA (HL)

Arithmetisches Schieben nach rechts.

Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 dupliziert wird und Bit 0 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 0 der Speicherzelle (HL)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SRA (IX+dd)

SRA (IY+dd)

Arithmetisches Schieben nach rechts.

Arithmetisches Schieben nach rechts.

Der Inhalt der Speicherzelle, die durch (IX+dd) bzw. (IY+dd) adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 dupliziert wird und Bit 0 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 0 von (IX+dd) bzw. (IY+dd)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SRL r

Logisches Schieben nach rechts.

Der Inhalt des Registers r wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 auf null gesetzt wird und Bit 0 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 0 des Registers r

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SRL (HL)

Logisches Schieben nach rechts.

Der Inhalt der Speicherzelle, die durch das Register HL adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 auf null gesetzt wird und Bit 0 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 0 der Speicherzelle (HL)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

SRL (IX+dd)

SRL (IY+dd)

Logisches Schieben nach rechts.

 

Der Inhalt der Speicherzelle, die durch (IX-dd) bzw. (IY+dd) adressiert wird, wird um eine Binärstelle nach rechts verschoben, wobei Bit 7 auf null gesetzt wird und Bit 0 in das Carry-Flag kopiert wird.

H=0

N=0

C = Bit 0 der Speicherzelle (IX+dd) bzw. (IY+dd)

S=1, wenn Ergebnis negativ, sonst S=0

Z=1, wenn Ergebnis gleich null, sonst Z=0

P/V=1, wenn Parität gerade, sonst P/V=0

RLD

4-Bit-Rotation nach links.

Bei dieser 4-Bit-Rotation werden der Akkumulator und eine durch HL adressierte Speicherzelle verändert. Die unteren vier Bits der Speicherzelle werden in die obere Hälfte der Zelle kopiert. Der zuvor gerettete Inhalt der oberen Hälfte der Speicherzelle wird in die untere Hälfte des Akkumulators kopiert und dessen(zuvor gerettete) untere Hälfte wird in die untere Hälfte der Speicherzelle kopiert. Diese Operation kann vorteilhaft bei der Verarbeitung von BCD-Zahlen verwendet werden.

H=0

N=0

C unverändert

S=1, wenn Akkumulator negativ, sonst S=0

Z=1, wenn Akkumulator gleich null, sonst Z=0

P/V=1, wenn die Parität im Akkumulator gerade

RRD

4-Bit-Rotation nach rechts.

Bei dieser 4-Bit-Rotation werden der Akkumulator und eine durch HL adressierte Speicherzelle verändert. Die unteren vier Bits der Speicherzelle werden in die untere Hälfte des Akkumulators kopiert. Der zuvor gerettete Inhalt der unteren Hälfte des Akkumulators wird in die obere Hälfte der Speicherzelle kopiert und die (zuvor gerettete) obere Hälfte der Speicherzelle wird in die untere Hälfte der Speicherzelle kopiert. Diese Operation kann vorteilhaft bei der Verarbeitung von BCD-Zahlen verwendet werden.

H=0

N=0

C unverändert

S=1, wenn Akkumulator negativ, sonst S=0

Z=1, wenn Akkumulator gleich null, sonst Z=0

P/V=1, wenn Parität im Akkumulator gerade


Last Update: 2008-05-31