Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier. |
Home Mikroprozessoren Programmierung eines Mikrocomputers Bedingte Verzweigungen | |
Siehe auch: Schleifen | |
|
|
Bedingte Verzweigungen
Bedingte Verzweigungen werden sehr häufig benötigt und entsprechen den 'IF...THEN...ELSE'-Anweisungen von Hochsprachen. Als Bedingungen werden sehr oft Vergleichsoperatoren herangezogen. Eine IF...THEN...ELSE-Konstruktion würde man beispielsweise so programmieren: CP $34 ; IF A=$34 JR NZ,L1 ; Sprung auf ELSE-Teil, falls ; Bedingung nicht erfüllt bla bla ; THEN bla bla bla bla JR L2 ; L1: bla bla ; ELSE bla bla bla bla ; L2: bla bla ; nächste Anweisung nach ; IF..THEN..ELSE Zu beachten ist, dass die Sprungbedingung komplementär zur Bedingung für den THEN-Teil ist. Die folgenden Beispiele sollen anhand von konkretem Z80-Code zeigen, wie man die wichtigsten Vergleiche in Z80-Assembler formuliert. In den angeführten Beispielen soll der Inhalt des Registers A mit der Zahl $34 verglichen werden, und entsprechend dem gewünschten Vergleich der Programmfluss kontrolliert werden. Es wird nur jeweils der Vergleichsteil aufgelistet, der restliche Teil der bedingten Verzweigung entspricht dem obigen Beispiel.
Gleichheit, Ungleicheit Zur Abfrage der Gleichheit kann man nach dem Compare-Befehl das Zero-Flag abfragen. Ist dieses auf eins gesetzt, so sind die Operanden gleich, ansonsten sind sie ungleich.GLEICH CP $34 ;A = $34 ? JP NZ,L1 ;Sprung falls A <> $34 bla bla ;THEN L1: UNGLEICH CP $34 ;A <> $34 ? JP Z,L1 ;Sprung falls A = $34 bla bla ;THEN L1: Alle anderen Vergleiche werden mit Hilfe des Carry-Flags und eventuell gemeinsam mit dem Zero-Flag angestellt. Kleiner, Kleiner-gleich Zum Vergleich auf kleiner-gleich wird nach dem Compare-Befehl sowohl das Carry-Flag als auch das Zero-Flag abgefragt. Ist entweder das Zero- oder das Carry-Flag gesetzt, so ist das Register A kleiner oder gleich dem Vergleichswert $34. Möchte man nur abfragen, ob der Akkumulator kleiner als $34 ist, so genügt die Abfrage des Carry-Flags alleine.KLEINER-GLEICH CP $34 ;A <= $34 ? JR Z,L3 JR NC,L1 L3: bla bla ;THEN L1: KLEINER CP $34 ;A < $34 JP NC,L1 bla bla ;THEN L1: Größer, Größer-gleich Die Abfrage, ob der Akkumulator größer oder gleich dem Vergleichswert ist, wird durch Abfrage des Carry-Flags bewerkstelligt. Ist dieses nicht gesetzt, so ist der Akkumulator größer oder gleich dem Vergleichswert. Etwas anders ist die Situation beim Vergleich auf größer. Für diesen Vergleich gibt es keine direkte Abfrage. Man muss zuerst die Abfrage auf Gleichheit stellen und bei gegebener Gleichheit die nachfolgende größer-gleich-Abfrage überspringen. GRÖSSER-GLEICH CP $34 ;A >= $34 JR C,L1 bla bla ;THEN L1: GRÖSSER CP $34 ;A > $34 JR Z,L1 JR C,L1 bla bla ;THEN L1:
|
|
Home Mikroprozessoren Programmierung eines Mikrocomputers Bedingte Verzweigungen |