Z80 CPU (in der DDR U880) FLAG-Funktion |
![]() |
![]() |
Letztmalig dran rumgefummelt: 12.07.21 16:54:48 |
Übersicht des FLAG-Registers - Korrektur siehe unten |
... Überprüfung der FLAG-Ergebnisse, da der LC-80 immer eine Byte-Gruppe im Ergebnis anzeigt
|
... logische Bedingungen, in deren
Entscheidung vom Geradeauslauf von Programmen abgewichen werden kann:
|
Im Ergebnis der Befehlsausführung werden - bis auf einige Befehle, die die Flags nicht beeinflussen - je nach Operation alle oder ein Teil der im F-Register (F'-Register) des Mikroprozessors U880 als Statusindikatoren
zusammengefassten Flagbits aktualisiert.
Bei der Programmabarbeitung können vier dieser Bits (C, Z, P/V und C) durch die Verwendung bedingungsabhängiger (TRUE/FALSE) Sprung-, Call- und Returnbefehle abgetastet werden. Dadurch wird ein vom Ergebnis der
Operation abhängiger Programmablauf organisiert. Zwei Flags (H und N) dienen zur Realisierung der BCD-Arithmetik und zwei
Bitpositionen (D3 und D5) im F (und auch im F')-Register sind nicht besetzt.
C = Übertragsflag (carry) - C-Flag - Das Übertragsflag (C oder auch CY) eröffnet dem Programmierer die Möglichkeit, Additions- und Subtraktionsroutinen höherer Genauigkeit aufzubauen, die über mehrere Bytes laufen. Der Übertrag bei der Addition (und das Borgen bei der Subtraktion) von der Bitposition D7 eines niederwertigen Datenbytes auf die Bitposition DO eines höherwertigen Datenbytes läuft immer über das Übertragsflag
Z = Nullflag (zero) - Z-Flag - Das Zeroflag (Z) signalisiert, ob im Ergebnis einer Operation der Wert Operation größer als die größtmögliche positive Zahl (+127) oder kleiner als die kleinstmögliche negative Zahl (-128), wird dieses Flag gesetzt (P/V=1), anderenfalls rückgesetzt (P/V=0)
P/V = Paritäts-/Oberlaufsflag (parity/overflow) - P/V-Flag - Das P/V-Flag wird unterschiedlich, in Abhängigkeit von bestimmten Befehlsgruppen, benutzt. Bei den logischen und Verschiebebefehlen zeigt es die Parität des Ergebnisses an. Ist die Anzahl der gesetzten Bits innerhalb eines Bytes gerade (even), wird P/V=1; ist sie ungerade (odd), wird P/V=0 gesetzt. Bei den arithmetischen Befehlen wird das P/V-Flag als Vorzeichenüberlaufskennzeichen benutzt. Es zeigt an, ob das Ergebnis der Operation zweier vorzeichenbehafteter ganzer Zahlen (1 Bit Vorzeichen / 7 Bit Daten) innerhalb des zulässigen Zahlenbereichs liegt. Ist das Resultat einer arithmetischen Operation.
S = Vorzeichenflag (sign) - S-Flag - Das Vorzeichenflag (S) enthält nach den arithmetischen und logischen Operationen den Inhalt des höchstwertigen Akkumulatorbits - also des Vorzeichenidentifikators
H = Halbübertragsflag (half carry) - H-Flag - Genauso wie das C-Flag nach der Ausführung von arithmetischen Befehlen einen Übertrag vom Bit D7 auf das nicht vorhandene Akkumulatorbit D8 signalisiert, zeigt das Halbübertragsflag (H) einen Übertrag vom Bit D3 auf Bit D4 im Akkumulator an.
N = Additions-/Subtraktionsflag (add/subtract) - N-Flag - Das N-Flag kennzeichnet, ob eine Addition oder Subtraktion als letzter Befehl ausgeführt wurde. Dadurch kann von einem nachfolgenden BCD-Normalisierungsbefehl (decimal adjust) entschieden werden, ob
Bibel der Flagsteuerung beim Z80 nach FUNKAMATEUR Heft 7/85 S. 358
Vielen Elektronikamateuren hat das Mikroprozessorsystem U 880 D ein neues, interessantes Tätigkeitsgebiet eröffnet. Viele Einzelheiten dazu sind schon veröffentlicht worden, aber manchmal nicht mit der ausreichenden Korrektheit. So musste beim Überprüfen der Setz-Bedingungen am U 880 D festgestellt werden, dass gegenüber der einschlägigen Literatur [1], [2], [3], [4], [5] alle 8 Bit des Registers F als Bedingungsregister nach festen Regeln gesetzt werden. Der in [1], [2],14], (5] publizierte Aufbau des F-Registers
|
ist aber falsch, da das Bit 3 und das Bit 5 nicht konstant C
sind, sondern in den meisten Fällen nach den Bedingungen 3) und 4) in Tabelle 2 gesetzt werden. Es ergibt sich somit folgender Aufbau für das
F-Register
|
Breite | FLAG | ||||||||
Befehle | 1-Byte-Register | C | N | P/V | T | H | U | Z | S |
SBC, SUB, CP | 1) | H | 7) | 4) | 6) | 3) | 2) | 5) | |
ADD, ADC | L | 9) | |||||||
DEC | H | 7) | |||||||
INC | L | 9) | |||||||
AND | L | 10) | H | ||||||
OR, XOR | L | ||||||||
Register A Schiebebefehle | 11) | · | · | · | |||||
CB-Schiebebefehle | H | 2) | 5) | ||||||
NEG | 12) | L | 6) | 2) | 12) | ||||
CPL | · | H | · | H | · | · | |||
INF | L | H | 13) | L | L | H | 13) | ||
SCF | H | · | · | · | · | · | |||
CCF | 14) | · | |||||||
RLD, RRD | · | 10) | 4) | L | 3) | 2) | 5) | ||
BIT | 16) | H | 15) | L | |||||
LDIR, LDDR, LDDI, LDD | 18) | 17) | L | 17) | · | · | |||
CPIR, CPDR, CPI, CPD | 20) | H | · | · | · | 19) | |||
ADD, ADC | 2-Byte-Register | 1) | L | · | 4) | 6) | 3) | · | |
SBC, INC, DEC | · | · | · | · | · | ||||
SET, RES, LD, DJNZ, EX, EXX |
Tabelle 1: Flag-Bedingungen pro Befehl
In der Literatur [1], [3], [5] werden die Setzbedingungen für Bedingungsregister nur global beschrieben. Das heißt, es wird nur angegeben, dass das Register sich ändert oder einen undefinierten Zustand einnimmt. Für die Programmierung von Assembler-Programmen, oder von Programmen im direkten Befehlskode ist die Kenntnis der Setzbedingungen der Flags, pro Befehl unbedingt erforderlich, da die Inhalte einiger Flags erhalten bleiben. In der Tabelle 1 wird für die wesentlichsten Befehle dargelegt unter welchen Bedingungen ein Flag „1" gesetzt wird. Dabei bedeuten in Tabelle 1
L Flag konstant "0"
H Flag.konstant "1"
· Flag wird nicht verändert
x) Flag wird nur „1", wenn die Bedingung x) in Tabelle 2 erfüllt ist, ansonsten ist das Flag = „0"
In der Tabelle 2 sind die Bedingungen genannt, mit denen die Flags in der Tabelle 1 gesetzt werden. Mittels der bedingten Operationen können die Register S/Z/P/C direkt ausgewertet werden: `
1) Übertrag-Signalisation (Borgen von 1 Bit bzw. Übertrag von 1 Bit)
2) Ergebnis gleich 00H
3) Ergebnisbit 5 = „1"
4) Ergebnisbit 3 = „1"
5) Vorzeichenbit (= Ergebnisbit 7) = "1"
6) Halbbyte-Übertrag-Signalisation (wenn bei der Operation von Bit 4 abgezogen bzw. zu Bit 4 addiert wird)
7) wenn bei der Operation das Vorzeichenbit 7 von „1" auf „0" wechselt
8) Flag; bleibt unverändert (Darstellung durch einen Punkt)
9) wenn das Vorzeichenbit 7 von „0" auf „1" wechselt
10) Anzahl der Einsen gerade (gerade Parität)
11) C-Flag wird entsprechend des jeweiligen Schiebebefehls gesetzt
12) (entspricht Negation von Z), Ergebnis ungleich 00H
13) Ergebnisbit 7 = „1" (negative Zahl)
14) Carry-Flag C wird negiert (C entspricht Negation von C)
15) Z = Negation von Bit i
16) Anzahl der Einsen im Ergebnis ungerade (ungerade Parität)
17) unbestimmt, undefinierbar
18) P =1, wenn Register B ungleich 00H, sonst "0"
19) wenn Information gefunden
20) wenn Information gefunden, aber Register B = 00H
Tabelle 2: Flug-Wirkungen
Abarbeitungsbedingung | wenn Flaginhalt ... ist | |
Z | Z = 1 | |
NZ | Z = 0 | |
C | C = 1 | |
NC | C = 0 | |
PE | P = 1 | |
PO | P = 0 | |
M | S = 1 |
Alle anderen Bedingungsregister können nur durch weitere Hilfsoperationen ausgewertet werden. Zum Beispiel Auswerten des Bedingungsregisters U:
F5 | PUSH AF | ;Inhalt von F steht nun auf dem Stack |
E1 | POP HL | ;Inhalt von vormals F steht nun in L |
CB 6D | BIT 5, L | ;Test, ob Bit gesetzt |
30 e | JR NZ, bru | ;Behandlungsroutine, wenn U = 1 |
28 e | JR Z, nobru | ;Behandlungsroutine, wenn U = 0 |
Die Tabellen 1 und 2 sind somit unentbehrliche Hilfsmittel bei des direkten Programmierung von U-880-D-Programmen. Tabelle 2: Setzbedingungen für die Tabelle 1
Literatur
[1] Herrmann, W.: Technik der Mikrorechner, radio-fernsehen-elektronik 28 (1979)
H.1, S.28 und 28 (1979) H:2, S.93
[2] Burkhardt, S., Hübner, U., Troll, A.: „Poly-Computer 880" (Arbeitsbuch), VEB
Kombinat Polytechnik und Präzisionsgeräte, Karl-Marx-Stadt 1983, S.74
[3] wie. [2], (Systemhandbuch), 5.18...26
[41 Lampe, B., Jorke, G. Wengei, N.: Algorithmen der Mikrorechentechnik; VEB
Verlag Technik, Berlin 1983, S.12
[5] Schwarz, W., Meyer, G., Eckhard, D.: Mikrorechner - Wirkungsweise,
Programmierung, Applikation, VEB
... Details zu den FLAG-Bits | Befehlsbasis - benötigt man, um die FLAG-Wirkung zu kennen | ||||||
|
|||||||
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im Oktober 1998 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |