Arithmetic // DAA (Decimal Adjust Accumulator)

## Description

This instruction conditionally adjusts the Accumulator for BCD addition and subtraction
operations. For addition (ADD, ADC, INC) or subtraction (SUB, SBC, DEC, NEG), the
following table indicates the operation being performed:
Hex Value Hex Value
In Upper In Lower Number
C Before Digit H Before Digit Added To C After
Operation DAA (Bits 7–4) DAA (Bits 3–0) Byte DAA
09–000–900 0
0 0–8 0 A–F 06 0
00–910–306 0
ADD 0 A–F 0 0–9 60 1
ADC 0 9–F 0 A–F 66 1
INC 0 A–F 1 0–3 66 1
10–200–960 1
1 0–2 0 A–F 66 1
10–310–366 1
SUB 0 0–9 0 0–9 00 0
SBC 0 0–8 1 6–F FA 0
DEC 1 7–F 0 0–9 A0 1
NEG 1 6–7 1 6–F 9A 1

## Example

An addition operation is performed between 15 (BCD) and 27 (BCD); simple decimal
arithmetic provides the following result:
15
+ 27
42
The binary representations are added in the Accumulator according to standard binary
arithmetic, as follows:
0001 0101
+ 0010 0111
0011 1100 = 3C
The sum is ambiguous. The DAA instruction adjusts this result so that the correct BCD
representation is obtained, as follows:
0011 1100
+ 0000 0110
0100 0010 = 42

## Opcodes