header.self8051
Suche   ||   HOME   ||   Eigenschaften   ||   Befehlsreferenz   ||   Derivate   ||  
 Eigenschaften
 Befehlsreferenz
     Einführung
    > alle Befehle
        ACALL
        ADD
        ADDC
        AJMP
        ANL
        ANL  C
        CJNE
        CLR
        CLR  A
        CPL
        CPL  A
       > DA  A
        DEC
        DIV  AB
        DJNZ
        INC
        INC  DPTR
        JB
        JBC
        JC
        JMP
        JNB
        JNC
        JNZ
        JZ
        LCALL
        LJMP
        MOV
        MOV  C
        MOV  DPTR
        MOVC
        MOVX
        MUL  AB
        NOP
        ORL
        ORL  C
        POP
        PUSH
        RET
        RETI
        RL  A
        RLC  A
        RR  A
        RRC  A
        SETB
        SJMP
        SUBB
        SWAP  A
        XCH
        XCHD
        XRL
 Derivate
 interessante Links
Sie sind hier: SELF8051 || Befehlsreferenz || alle Befehle || DA  A

DA     A


Funktion


Dezimalkorrektur des Akkumulators (A) nach der Addition zweier gepackter BCD-Ziffern.

 

Beschreibung


DA   A    korrigiert den 8bit-Wert im Akkumulator (A), der durch eine vorangegangene Addition von zwei Variablen (beide im gepackten BCD-Format) entstanden ist, wodurch zwei 4bit-Ziffern entstehen. Zur Durchführung der Addition kann jeder ADD- oder ADDC-Befehl verwendet worden sein.

+6 zum niederwertigen Halbbyte des Akkumulators, wenn...
Ist der Wert der Akkumulatorbits 3 bis 0 größer als 9 (XXXX1010 .. XXXX1111) oder ist das Hilfsübertragungsbit gesetzt (AC=1), so wird 6 zum Akkumulator addiert, wodurch sich die richtige BCD-Ziffer im niederwertigen Halbbyte ergibt.
Diese interne Addition würde das Übertragsbit setzen (CY=1), wenn sich ein Übertrag aus dem niederwertigen 4bit-Feld durch alle höherwertigen Bits fortpflanzt, sie würde es andernfalls nicht löschen.

+6 zum höherwertigen Halbbyte des Akkumulators, wenn...
Ist nun das Übertragsbit gesetzt (CY=1) oder überschreiten die vier höherwertigen Bits 9 (1010XXXX .. 1111XXXX), so werden die höherwertigen Bits sechsmal inkrementiert, wodurch sich die richtige BCD-Ziffer im höherwertigen Halbbyte einstellt.
Auch hier würde das Übertragsbit gesetzt werden (CY=1), wenn sich ein Übertrag aus den höherwertigen Bits ergibt, andernfalls jedoch nicht gelöscht. Das Übertragsbit (CY) zeigt somit an, ob die Summe der zwei ursprünglichen BCD-Ziffern größer als 100 ist, was eine Addition über mehere Bytes gestattet.

Das Überlaufsbit (OV) wird nicht beeinflußt.

Die beschriebenen Vorgänge laufen während eins einzigen Befehlszyklus ab. Im wesentlichen ermöglicht dieser Befehl die dezimale Korrektur durch Addition von 00H, 06H, 60H oder 66H zum Akkumulator (im einzelnen vom ursprünglichen Akkumulatorinhalt und Programmstatuswort abhängig).

Zur Beachtung:
Mit   DA   A    kann man eine hexadezimale Zahl nicht einfach in die BCD-Schreibweise umsetzten, auch darf   DA   A    nicht auf eine dezimale Subtraktion angewandt werden.

 

Beispiel


Der Akkumulator (A) enthalte den Wert 56H (01010110B), der die gepackte BCD-Ziffern der Dezimalzahl 56 darstellt. Register 3 enthalte den Wert 67H (01100111B), der in gleicher Weise die gepackte BCD-Ziffern der Dezimalzahl 67 darstellt. Der erste Befehl

ADDC   A,R3
DA         A

ergibt zunächst den Wert BEH (10111110B) der binären Standard-Addition im Akkumulator. Das Übertagsbit und das Hilfsübertragsbit werden gelöscht (CY=0, AC=0).

Der folgende Befehl   DA   A    ändert den Akkumulatorinhalt in 24H (00100100B), d.h. den dezimalen Wert 24 in gepackten BCD-Ziffern. Dies sind die niederwertigen Ziffern von 124, der dezimalen Summe von 56 und 67 und dem Übertrag (somit ergibt sich die wahre Summe 124 = 56 + 67 + 1). Das Übertragsbit wird während ds Befehls   DA   A    gesetzt; es zeigt an, dass ein dezimaler Überlauf stattgefunden hat.

Die BCD-Ziffern können durch Addition von 01H oder 99H inkrementiert bzw. dekrementiert werden. Wenn der Akkumulator ursprünglich 30H enthielt und dies die Ziffern des dezimalen Wertes 30 darstellen soll, dann wird durch die Befehlsfolge

ADD    A,#99H
DA       A

das Übertragsbit gesetzt (CY=1), und im Akkumulator ergibt sich 29H (da 30 + 99 = 129). Die niederwertigen Ziffern dieser Summe lassen sich also als 30 - 1 = 29 interpretieren.

 

Bytes:      1
Zyklen:    1

 

Befehlscodierung


 1   1   0   1   0   1   0   0 

 


Fehler auf dieser Seite melden



 

Seite drucken

Send a Friend

 
 zum Seitenanfang   © Autor Dipl. Ing. Sven Pohl || Impressum || Datenschutz


Tipp: rechtssichere Patientenverfügung einfach online erstellen für nur 14,90 €

  

 

Wertschätzen Sie den Aufwand und den Inhalt mit einer kleinen Spende. Danke.

Sie bestimmen die Höhe, jeder noch so kleine Betrag hilft.

 

   
HASM - Skyscrapper 2