A of a DAA operation with a specific hex example.
The DAA (Decimal Adjust Accumulator) instruction is a specialized arithmetic command in the 8085 microprocessor designed to facilitate Binary Coded Decimal (BCD) arithmetic. While the 8085's Arithmetic Logic Unit (ALU) natively performs binary addition, most human-facing systems—like calculators or digital clocks—require results in base-10. The DAA instruction bridges this gap by automatically correcting binary results into valid packed BCD format, where each 8-bit byte represents two decimal digits (00 to 99).
The between DAA in the 8085 versus the 8086 or Z80. Daa Instruction In 8085 Microprocessor
One of the most important constraints of the DAA instruction is that it must be executed immediately following an ADD, ADC, or INR operation. It does not work correctly after subtraction (SUB or SUI) because the 8085 lacks a "Decimal Adjust for Subtraction" equivalent, which is found in later processors like the Z80. Furthermore, DAA is an "implied" addressing mode instruction, meaning it requires no operands; it always acts exclusively on the contents of the Accumulator register.
An example showing how to add two large decimal numbers. A of a DAA operation with a specific hex example
The necessity of DAA arises from the fact that binary addition of BCD numbers often yields "illegal" results. For example, adding decimal 9 (1001) and decimal 1 (0001) in binary results in 1010 (hexadecimal A). In BCD, however, the result should be 10, represented as 0001 0000. The DAA instruction detects these discrepancies and applies a correction factor to ensure the final value in the accumulator matches decimal logic.
Operationally, DAA follows a two-step logic based on the status of the processor's flags and the values of the two 4-bit nibbles in the accumulator. First, it examines the lower nibble (bits D0-D3). If this value is greater than 9, or if the Auxiliary Carry (AC) flag is set to 1, the instruction adds 6 (06H) to the accumulator. Second, it examines the upper nibble (bits D4-D7). If this value is now greater than 9, or if the Carry (CY) flag is set to 1, the instruction adds 96 (60H) to the accumulator. These additions of 6 or 60 force a carry-over into the next higher digit, effectively converting base-16 overflows into base-10 carries. The DAA instruction bridges this gap by automatically
In conclusion, the DAA instruction is a fundamental tool for assembly language programmers dealing with decimal data. By automating the correction of binary sums, it simplifies the development of applications that interact with decimal-based inputs and outputs. Despite the 8085's binary architecture, DAA allows it to function effectively in environments where decimal precision and readability are paramount. If you are interested, I can provide: