Addieren von zwei HEX-Zahlen mit Übertrag sowie Ablage des Ergebnisses auf Speicherzellen history menue Letztmalig dran rumgefummelt: 07.10.13 08:28:38

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

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:

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:

 



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