Mehfaches Addieren von 8- sowie 16-Bit-HEX-Zahlen mit Übertrag sowie Ablage des Ergebnisses auf Speicherzellen |
![]() |
![]() |
Letztmalig dran rumgefummelt: 11.10.13 08:08:06 |
|
|
|||
Aufgabe 2b - einfachste Fälle: Zu addieren sind mehrere HEX-Zahlen (Anzahl in B) mit Berücksichtigung des Übertrages. Damit werden für die Operanden mindestens zwei, aber auch für das Ergebnis mindestens zwei Register benötigt (C übernitmmt den Low-Teil, D den High-Teil des Ergebnisses). Die Summanden und Ergebnis sollen auf in Regsistern stehen!
Einfachster Fall: Addieren zweier oder mehrer 8-Bit-Werte auf dem RAM (ab Adresse 02100H mit Anzeige der Einzeloperanden und des Ergebnisses im HEX-Format:
Pseudocode zum Programm:
Randbedingungen:
Operandentabelle:
Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
ORG 2000H | ||||||
0001 | 2000H | AF | XOR A | ;Register A ist nun garantiert "0" | ||
0002 | 2001H | 4F | LD C, A | ;Register C ist nun garantiert "0" -> Ergebnisregister Low-Teil | ||
0002 | 2002H | 57 | LD D, A | ;D als Übertragsregister ist nun auch "0" -> Ergebnisregister High-Teil | ||
0003 | 2003H | 21 13 20 | LD A,(HL) | ;Registerpaar HL wird mit Startpunkt der Operanden geladen | ||
0004 | 2006H | 0606 | LD B,06H | ;Register B wird mit Anzahl der Summanden geladen (vorläufig 6!) | ||
0005 | M1: | INIT | 2008H | 7E | LD A,(HL) | ;aktuellen Summanden von der Table holen |
0006 | 2009H | 81 | ADD A,C | ;aktueller Low-Teil der Summe in A | ||
0007 | 200AH | 4F | LD C,A | ;aktueller Low-Teil der Summe in C | ||
0008 | 200BH | 3E 00 | LD A, 00H | ;A "0" setzen | ||
0009 | 200DH | 8A | ADC D | ;Übertragsrechnung für Register D | ||
0010 | 200EH | 57 | LD D,A | ;High-Teil wieder in D | ||
0011 | 200FH | 23 | INC HL | ;HL auf den nächsten Summanden setzen | ||
0012 | 2010H | 10F6 | DJNZ M1 | ;Verarbeiten des nächsten Operanden solange Anzahl nicht 0 | ||
0013 | 2012H | 76 | HALT | ;alle angewiesenen Operationen sind verarbeitet | ||
0014 | TABLE001: | DATTABLE | SETBASE TABLE001 | ;Beginn Operandenbereich | ||
0015 | 2013H | 57 | DEFB 057H | ;erster möglicher Operand (Anzahl abhängig von B) | ||
0016 | 2014H | A3 | DEFB 0A3H | ;zweiter möglicher Operand (Anzahl abhängig von B) | ||
0017 | 2015H | 94 | DEFB 094H | ;dritter möglicher Operand (Anzahl abhängig von B) | ||
0018 | 2016H | CD | DEFB 0CDH | ;vierter möglicher Operand (Anzahl abhängig von B) | ||
0019 | 2017H | 35 | DEFB 035H | ;fünfter möglicher Operand (Anzahl abhängig von B) | ||
0020 | 2018H | 22 | DEFB 022H | ;sechter möglicher Operand (Anzahl abhängig von B) |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
Komplexerer Fall: Addieren mehrerer 16-Bit-Werte auf dem RAM (ab Adresse 02100H:
Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
ORG 2000H | ||||||
0001 | INIT | 2000H | 3E 09 | LD A, 099H | ;Register A wird geladen | |
0002 | 2002H | 06 09 | LD B, 009H | ;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 | |
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
![]() 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 |