Mehfaches Addieren von 8- sowie 16-Bit-HEX-Zahlen mit Übertrag sowie Ablage des Ergebnisses auf Speicherzellen history menue Letztmalig dran rumgefummelt: 11.10.13 08:08:06

LC-80-Programmierung

inhaltlich auf korrektem Stand - evtl. partiell unvollständig ;-)

Informatik-Profi-Wissen

die beliebte alphabetisch sortierte Schnell-Liste

die beliebte numerisch sortierte Schnell-Liste

Allgemeine FLAG-Wirkung

FLAG-Wirkung auf OP-Code-Gruppen

Befehlsdokumentation mit Beispiel

Übersicht der Subroutinen des LC-8

Assembler-Programmierung

 

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