| Addieren von zwei HEX-Zahlen mit Übertrag sowie Ablage des Ergebnisses auf Speicherzellen |
|
|
Letztmalig dran rumgefummelt: 07.10.13 08:28:38 |
|
|
|
|||
Aufgabe 2a - einfachste Fälle: Zu addieren sind zwei HEX-Zahlen mit Berücksichtigung des Übertrages. Damit werden für die Operanden zwei, aber auch für das Ergebnis zwei Register benötigt. Mit dem Befehl DAA (Decimal Adjust Accumalator - entspricht 27 H), lässt sich auch eine Dezmaldarstellung realisieren.
Vorbetrachtung: Konvertieren eines 8-Bit-Wertes zwischen 0A und 0FH in den entsprechenden Dezimalwert - das Ergebnis steht als Dezimalwert:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 3E 0A | LD A, 038H | ;Register A wird geladen (Startwert für Count Down) | |
| 0002 | 2002H | 27 | DAA | ;Dezimalkorrektur Akku | ||
| 0003 | 2003H | 76 | HALT | ;Programmende |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Einfachster Fall: Addition zweier 8-Bit-Werte und dezimale Abbildung nur im Register - wir verwenden zwei Operanden, welche 9 nicht überschreiten:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 3E 09 | LD A, 006H | ;Register A wird geladen | |
| 0002 | 2002H | 06 09 | LD B, 006H | ;Register B | ||
| 0003 | ADDIT | 2004H | 80 | ADD B | ;Summe Reg A und B -> Ergebnis in A | |
| 0004 | 2005H | 27 | DAA | ;Dezimalkorrektur Akku | ||
| 0005 | 2006H | 76 | HALT | ;Programmende |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Beispielfall: Addition zweier 8-Bit-Werte mit Überschreitung des 8-Bit-Raumes ohne CARRY-Auswertung - der Übertrag geht dann verloren:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 3E FF | LD A, 0FFH | ;Register A wird geladen | |
| 0002 | 2002H | 06 01 | LD B, 001H | ;Register B | ||
| 0003 | ADDIT | 2004H | 80 | ADD B | ;Summe Reg A und B -> Ergebnis in A | |
| 0004 | 2005H | 76 | HALT | ;Programmende |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Beispielfall: Addition zweier 8-Bit-Werte mit Überschreitung des 8-Bit-Raumes mit CARRY-Auswertung niederwertigster 8-Bit Teil steht im Register B, höherwertiger Teil im Register A:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 3E FF | LD A, 0FFH | ;Register A wird geladen | |
| 0002 | 2002H | 06 01 | LD B, 001H | ;Register B | ||
| 0003 | ADDIT | 2004H | 80 | ADD B | ;Summe Reg A und B -> Ergebnis in A - CARRY gesetzt | |
| 0004 | 2005H | 47 | LD B, A | ;niederwertige 8 Bit der Summe in B | ||
| 0005 | 2006H | 3E 00 | LD A, 000H | ;Akku leer schreiben | ||
| 0006 | 2008H | 8F | ADC A | ;CARRY-Flag zu A addieren | ||
| 0007 | 2009H | 76 | HALT | ;Programmende |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Beispielfall: Addition zweier 8-Bit-Werte mit Überschreitung des 8-Bit-Raumes mit CARRY-Auswertung niederwertigster 8-Bit Teil steht auf 2100H und Carry steht auf 2101H:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 3E FF | LD A, 0FFH | ;Register A wird geladen | |
| 0002 | 2002H | 06 01 | LD B, 001H | ;Register B | ||
| 0003 | 2004H | 21 00 21 | LD HL, 02100H | ;Lade HL mit Zeiger auf Speicherplatz | ||
| 0003 | ADDIT | 2004H | 80 | ADD B | ;Summe Reg A und B -> Ergebnis in A - CARRY gesetzt | |
| 0004 | 2005H | 77 | LD (HL), A | ;niederwertige 8 Bit auf RAM 2100H | ||
| 0005 | 2006H | 3E 00 | LD A, 000H | ;Akku leer schreiben | ||
| 0006 | 2008H | 8F | ADC A | ;CARRY-Flag zu A addieren | ||
| 0006 | 2008H | 23 | INC HL | ;Zeiger auf RAM 2101H | ||
| 0006 | 2008H | 77 | LD (HL), A | ;Carry auf RAM 2101H | ||
| 0007 | 2009H | 76 | HALT | ;Programmende |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Beispielfall: Addition zweier 16-Bit-Werte mit Überschreitung des 16-Bit-Raumes ohne Carry-Auswertung:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 21 FF 01 | LD HL, 001FFH | ;Registerpaar HL wird mit erstem Operanden geladen | |
| 0002 | 2003H | 01 45 09 | LD BC, 000945H | ;Register B wird mit zweitem Operanden geladen | ||
| 0003 | ADDIT | 2006H | 09 | ADD HL, BC | ;Addition durch Carry | |
| 0004 | 2007H | 76 | HALT | ;Summe Reg A und B -> Ergebnis in A (theoretisch 00H) |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Beispielfall: Addition zweier 16-Bit-Werte bei Überschreitung des 16-Bit-Raumes mit Carry-Auswertung:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 21 FF F8 | LD HL, 0F8FFH | ;Registerpaar HL wird mit erstem Operanden geladen | |
| 0002 | 2003H | 01 45 A9 | LD BC, 0A945H | ;Register B wird mit zweitem Operanden geladen | ||
| 0003 | ADDIT | 2006H | 09 | ADD HL, BC | ;Addition HL und BC durch Carry mit Summe in HL sowie Carry-Flag | |
| 0004 | 2007H | 3E 00 | LD A, 00H | ;Reg A leer setzen | ||
| 0005 | 2009H | 8F | ADC A | ;Übertrags-Flag in Register A | ||
| 0006 | 200AH | 76 | HALT | ;Ende -> Ergebnis: A244 in HL und 01 in A |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Anmerkungen:
00FFH + 0001H darf keinen CARRY-Flag ergeben, da zwar das Register L nicht aber das Registerpaar HL überläuft
FFFFH + FFFFH muss 1FFFEH mit einem CARRY-Flag ergeben, da das Registerpaar HL überläuft
Beispielfall: Addition zweier 16-Bit-Werte bei Überschreitung des 16-Bit-Raumes mit Carry-Auswertung und Ablage des Ergebnisses auf dem RAM, wobei gelten soll:
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| ORG 2000H | ||||||
| 0001 | INIT | 2000H | 21 FF F8 | LD HL, 0F8FFH | ;Registerpaar HL wird mit erstem Operanden geladen | |
| 0002 | 2003H | 01 45 A9 | LD BC, 0A945H | ;Register B wird mit zweitem Operanden geladen | ||
| 0003 | ADDIT | 2006H | 09 | ADD HL, BC | ;Addition HL und BC durch Carry mit Summe in HL sowie Carry-Flag | |
| 0004 | 2007H | 3E 00 | LD A, 00H | ;Reg A leer setzen | ||
| 0005 | 2009H | 8F | ADC A | ;Übertrags-Flag in Register A | ||
| 0006 | 200AH | 76 | HALT | ;Ende -> Ergebnis: A244 in HL und 01 in A |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Anmerkungen:
00FFH + 0001H darf keinen CARRY-Flag ergeben, da zwar das Register L nicht aber das Registerpaar HL überläuft
FFFFH + FFFFH muss 1FFFEH mit einem CARRY-Flag ergeben, da das Registerpaar HL überläuft
|
zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost am 12. Mai 2009 |
|
... 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 |