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.
|