; 9.6.13.___Bittest-_und_-Setzbefehle_(Bitmanipulation) Die Bitmanipulationsbefehle erlauben, Bits in einem Register oder auf einem Speicherplatz zu setzen, zu loeschen und zu testen. ____________________________________________________________ | | | | | 8080- | Z80- | | | Mnemonik | Mnemonik | Wirkungsweise der Befehle | |__________|______________|__________________________________| | | | | | --- | SET b,r | Die durch b gekennzeichnete Bit- | | | | position wird in dem Register r | | | | gesetzt. | |__________|______________|__________________________________| ____________________________________________________________ | | | | | 8080- | Z80- | | | Mnemonik | Mnemonik | Wirkungsweise der Befehle | |__________|______________|__________________________________| | | | | | --- | SET b,M | Die durch b gekennzeichnete Bit- | | | | position wird in der Speicher- | | | | stelle gesetzt, die durch das | | | | Register HL adressiert ist. | | | | | | --- | SET b,(IX+d)| Die durch b gekennzeichnete Bit- | | | | position wird in der Speicher- | | | | stelle gesetzt, die durch den | | | | Inhalt des Indexregisters IX plus| | | | Verschiebung adressiert ist. | | | | | | --- | SET b,(IY+d)| Die durch b gekennzeichnete Bit- | | | | position wird in der Speicher- | | | | stelle gesetzt, die durch den In-| | | | halt des Indexregisters IY plus | | | | Verschiebung adressiert ist. | | | | | | --- | RES b,t | Die durch b gekennzeichnete Bit- | | | | position in t wird geloescht. | | | | | | --- | BIT b,t | Die durch b gekennzeichnete Bit- | | | | position in t wird getestet. Das | | | | Komplement des zu testenden Bits | | | | wird in das Z-Flag geladen. | |__________|______________|__________________________________| 9.6.14.___Eingabebefehle Die Ein- und Ausgabegruppe gestattet einen weiteren Anwen- dungsbereich von Datentransfer zwischen Speicherplaetzen oder den Universalregistern der CPU und den externen E/A-Geraeten. Die Eingabebefehle setzen automatisch das Flagregister, so dass keine zusaetzlichen Befehle noetig sind, um den Status der Eingabedaten zu ermitteln. ____________________________________________________________ | | | | | 8080- | Z80- | | | Mnemonik | Mnemonik | Wirkungsweise der Befehle | |__________|______________|__________________________________| | | | | | IN n | IN A,(n) | Kanaladresse wird mittels Direkt-| | | | operand eingestellt. | | | | Zielregister ist der Akkumulator | | | | A <--- (n) | |__________|______________|__________________________________| ____________________________________________________________ | | | | | 8080- | Z80- | | | Mnemonik | Mnemonik | Wirkungsweise der Befehle | |__________|______________|__________________________________| | | | | | --- | IN r,(C) | Kanaladresse wird indirekt ueber | | | | das Register C eingestellt. | | | | r <--- (C) | | | | | | --- | INI | Kanaladresse wird indirekt ueber | | | | Register C eingestellt. Zieladr. | | | | ueber Register HL. B kann als | | | | Bytezaehler arbeiten. | | | | B wird dekrementiert, HL inkre- | | | | mentiert. | | | | (HL) <--- (C) | | | | B <--- B-1 | | | | HL <--- HL+1 | | | | | | --- | INIR | Kanaladresse wird indirekt ueber | | | | Register C eingestellt, Zieladr. | | | | ueber Register HL. B arbeitet | | | | als Bytezaehler. B wird dekremen-| | | | tiert, HL inkrementiert. Es wird | | | | eine Blockuebertragung durchge- | | | | fuehrt bis B=0 ist. | | | | (HL) <--- (C) | | | | B <--- B-1 | | | | HL <--- HL+1 | | | | Wiederholen bis B=0. | | | | | | --- | IND | Kanaladresse wird indirekt ueber | | | | Register C eingestellt. Zieladr. | | | | ueber Register HL. B kann als | | | | Bytezaehler arbeiten. B und | | | | HL werden dekrementiert. | | | | (HL) <--- (C) | | | | B <--- B-1 | | | | HL <--- HL-1 | | | | | | --- | INDR | Kanaladresse wird indirekt ueber | | | | Register C eingestellt. Zieladr. | | | | ueber Register HL. B arbeitet | | | | als Bytezaehler. B und HL werden| | | | dekrementiert. Es wird eine | | | | Blockuebertragung durchgefuehrt, | | | | bis B = 0 ist. | | | | (HL) <--- (C) | | | | B <--- B-1 | | | | HL <--- HL-1 | | | | Wiederholen B = 0. | |__________|______________|__________________________________| .pa Die Kanaladresse liegt auf der unteren Haelfte des Adressen- busses A0 - A7. Auf der oberen Haelfte des Adressenbusses liegt bei IN A,(n) der Akkumulatorinhalt bei den restlichen Befehlen der Inhalt des Registers B. 9.6.15.___Ausgabebefehle ____________________________________________________________ | | | | | 8080- | Z80- | | | Mnemonik | Mnemonik | Wirkungsweise der Befehle | |__________|______________|__________________________________| | | | | | OUT n | OUT (n),A | Kanaladresse wird mit Direktope- | | | | rand eingestellt. Quellregister | | | | ist der Akkumulator: (n) <--- A. | | | | | | --- | OUT C,r | Kanaladresse wird indirekt ueber | | | | Register C eingestellt. Quellre- | | | | gister ist r: (C) <--- r. | | | | | | --- | OUTI | Kanaladresse wird indirekt ueber | | | | das Register C eingestellt, | | | | Quelladresse ueber Register HL. | | | | B kann als Bytezaehler arbeiten. | | | | B wird dekrementiert, HL inkre- | | | | mentiert. | | | | (C) <--- (HL) | | | | B <--- B-1 | | | | HL <--- HL+1 | | | | | | --- | OTIR | Kanaladresse wird indirekt ueber | | | | das Register C eingestellt, | | | | Quelladresse ueber Register HL. | | | | B arbeitet als Bytezaehler. | | | | B wird dekrementiert, HL inkre- | | | | mentiert. Es wird eine Block- | | | | uebertragung durchgefuehrt, bis | | | | B = 0 ist. | | | | (C) <--- (HL) | | | | B <--- B-1 | | | | HL <--- HL+1 | | | | Wiederholen bis B = 0 | | | | | | --- | OUTD | Kanaladresse wird indirekt ueber | | | | Register C eingestellt, Quell- | | | | adresse ueber Register HL. B kann| | | | als Bytezaehler arbeiten. B und | | | | HL werden dekrementiert. | | | | (C) <--- (HL) | | | | B <--- B-1 | | | | HL <--- HL-1 | |__________|______________|__________________________________| .pa ____________________________________________________________ | | | | | 8080- | Z80- | | | Mnemonik | Mnemonik | Wirkungsweise der Befehle | |__________|______________|__________________________________| | | | | | --- | OTDR | Kanaladresse wird indirekt ueber | | | | das Register C eingestellt, | | | | Quelladresse ueber Register HL. B| | | | arbeitet als Bytezaehler. B und | | | | HL werden dekrementiert. Es wird | | | | eine Blockuebertragung durchge- | | | | fuehrt, bis B=0 ist. | | | | (C) <--- (HL) | | | | B <--- B-1 | | | | HL <--- HL-1 | | | | Wiederholen bis B=0 ist. | |__________|______________|__________________________________| 9.6.16.___Abkuerzungsverzeichnis_zur_Befehlsbeschreibung r,r' : Register A, B, C, D, E, H und L koennen eingesetzt werden. dd : Doppelregister BC, DE, HL und SP koennen eingesetzt werden. qq : Doppelregister AF, BC, DE und HL sind moeglich. pp : Doppelregister BC, DE und SP sind erlaubt. bb : Doppelregister BC, DE, HL, SP, IX und IY sind erlaubt. s : r, n, M, (IX+d) und (IY+d) sind erlaubt. t : r, M, (IX+d) und (IY+d) sind moeglich. n : 8-Bit-Direktoperand nn : 16-Bit-Direktoperand d : Verschiebung bei Adressierung ueber Indexregister, erlaubt im Bereich von -128 <= d <= 127 Die Bereichsgrenzen werden vom Assembler nicht geprueft! e : relative Sprungsadresse, erlaubt im Bereich von -128 <= e <= 127 Die Bereichsgrenzen werden vom Assembler nicht geprueft! b : Bit, das in den Bitmanipulierbefehlen behandelt werden soll 0 <= b <= 7 M : Inhalt des durch HL adressierten Speicherplatzes k : Die Werte 0, 1, 2, 3, 4, 5, 6, 7 sind erlaubt. p : Die Werte 00H, 08H, 10H, 18H, 28H, 30H, 38H sind erlaubt. CY : Carry-Flag Anmerkung: In der 8080-Mnemonik wird fuer die Operanden nur der erste Buchstabe geschrieben: . H fuer HL . D fuer DE . B fuer BC. Aber es bleibt SP, und fuer AF wird PSW verwendet. Fuer M darf nicht (HL) geschrieben werden. 6.6.17.___Arbeit_mit_den_Bedingungsbits_(Flags) Das Flagregister F gibt Auskunft ueber das Ergebnis der letz- ten Prozessoroperation. Es dient im wesentlichen dazu, bedingte Programmverzweigungen bzw. bedingte Unterprogrammaufrufe oder -rueckspruenge auszu- fuehren. Flagregister _______________________________ |_7_|_6_|_5_|_4_|_3_|_2_|_1_|_0_| |_S_|_Z_|_X_|_H_|_X_|P/V|_N_|_CY| S - Vorzeichenbit (Sign - Flag) Z - Nullbit (Zero - Flag) H - Halbbyteueberlaufbit (Half - Carry - Flag) N - Additions- / Subtraktionsbit P/V - Paritaets- / Uebertragsbit (Parity / Overflow - Flag) CY - Uebertragsbit (Carry - Flag) X - nicht belegt Vorzeichenbit_(S-Flag) Bei bestimmten Befehlen wird das hoechstwertige Bit des Akku- mulators geladen. Bei Ausfuehrung von arithmetischen Befehlen mit vorzeichenbe- hafteten Zahlen wird eine positive Zahl durch eine 0 und eine negative Zahl durch eine 1 in der hoechstwertigen Bitstelle gekennzeichnet. Nullbit_(Z-Flag) Es wird bei arithmetischen und logischen 1-Byte-Operationen gesetzt, wenn das Ergebnisbyte des Akkumulators 0 ist. Sonst wird das Ergebnisbyte zurueckgesetzt. Bei Vergleichs- und Suchbefehlen wird das Z-Flag gesetzt, sobald der Vergleich positiv ausgeht. Bei den Bit-Befehlen wird das Z-Flag mit dem komplementaeren Wert des getesteten Bits geladen. Bei der Uebertragung eines Bytes zwischen einer Speicherstelle und einer E/A-Schnittstelle (INI, IND, OUTI, OUTD) wird das Z- Flag 1 gesetzt, wenn der Wert des Zaehlregisters 0 wird. Bei IN r,(C) wird das Z-Flag gesetzt, wenn die eingezogenen bzw. am E/A-Tor anliegenden Daten den Wert 0 haben. Halbbyte-Uebertragsbit_(H-Flag) Das H-Flag wird entsprechend dem Uebertragungsergebnis zwi- schen den Bits 3 und 4 einer arithmetischen 1-Byte-Operation gesetzt (falls Uebertrag) oder rueckgesetzt (falls kein Ueber- trag). Es wird beim Befehl DAA verwendet, um das Ergebnis einer gepackten BCD-Addition bzw. -Subtraktion zu korrigieren. __________________________________________________ | | | | | H | Addition | Subtraktion | |___|_____________________|________________________| | | | | | 1 | Uebertrag von Bit 3 | Negativer Uebertrag | | | zu Bit 4 | von Bit 4 | |___|_____________________|________________________| | | | | | 0 | Kein Uebertrag von | Kein negativer Ueber- | | | Bit 3 zu Bit 4 | trag von Bit 4 | |___|_____________________|________________________| Paritaets-_/_Ueberlaufbit_(P/V-Flag) Es wird unterschiedlich genutzt. Bei arithmetischen Befehlen wird das P/V-Flag gesetzt, wenn im Ergebnis das hoechste Bit des Akkumulators gesetzt wird. Bei logischen Operationen und Verschiebebefehlen dient das P/V-Flag zur Ueberpruefung der Paritaet des Ergebnisses. Ist die Anzahl der gesetzten Bits im angesprochenen Byte gerade (0, 2, 4, 6, 8), so wird das P/V-Flag gesetzt, ansonsten rueckgesetzt. Bei Blocktransport- (LDI, LDIR, LDD, LDDR) und Blocksuchbefeh- len (CPI, CPIR, CPD, CPDR) gibt das P/V-Flag Auskunft ueber den Stand des Bytezaehlers. Das P/V-Flag wird rueckgesetzt, wenn nach Dekrementieren des Bytezaehlers (=<BC>) als Ergebnis 0 entsteht. In allen uebrigen Faellen bleibt das P/V-Flag 1. Additions-_/_Subtraktionsbit_(N-Flag) Es wird intern bei dem DAA-Befehl benutzt, um zwischen Addi- tions- und Subtraktionsbefehlen zu unterscheiden. Bei allen Additionsbefehlen wird das N-Flag rueckgesetzt. Subtraktions- befehle setzten das N-Flag. Uebertragsbit_(CY-Flag) Das Setzen / Ruecksetzen des CY-Flags wird je nach ausgefuehr- ter Operation verschieden behandelt. Das CY-Flag wird gesetzt, wenn - bei Additionsbefehlen ein Uebertrag und - bei Subtraktionsbefehlen ein negativer Uebertrag entsteht. Es wird rueckgesetzt, - bei Additionsbefehlen, die keinen Uebertrag erzeugen und - bei Subtraktionsbefehlen, die keinen negativen Uebertrag erzeugen. Bei Verschiebebefehlen (RLA, RLC, RL, RR) wird das CY-Flag als Zwischenspeicher fuer die Uebertragung des niederwertigsten bzw. hoechstwertigen Bits eines CPU-Registers bzw. Speicher- platzes benutzt. Bei den Befehlen RLCA, RLC und SLA enthaelt das CY-Flag den Wert des hoechstwertigen Bits, das durch den Befehl aus dem behandelten Register bzw. Speicherplatz hinausgeschoben wurde. Bei den Befehlen RRCA, RRC, SRA, SRL enthaelt das CY-Flag analog den Wert des niederwertigsten Bits. Die logischen Befehle AND, OR, XOR setzen das CY-Flag grund- saetzlich zurueck. Die speziell fuer das CY-Flag vorgesehenen Befehle SCF (Setzen CY-Flag) und CCF (Komplement C-Flag) erlauben das Setzen bzw. Komplementieren des CY-Flags.