**up:**
Chapter 3 -- Applications Instruction Set

**prev:** 3.2 Binary Arithmetic Instructions

**next:** 3.4 Logical Instructions

# 3.3 Decimal Arithmetic Instructions

Decimal arithmetic is performed by combining the binary arithmetic
instructions (already discussed in the prior section) with the decimal
arithmetic instructions. The decimal arithmetic instructions are used in one
of the following ways:
- To adjust the results of a previous binary arithmetic operation to
produce a valid packed or unpacked decimal result.
- To adjust the inputs to a subsequent binary arithmetic operation so
that the operation will produce a valid packed or unpacked decimal
result.

These instructions operate only on the AL or AH registers. Most utilize the
AF flag.
## 3.3.1 Packed BCD Adjustment Instructions

DAA (Decimal Adjust after Addition)
adjusts the result of adding two valid
packed decimal operands in AL.
DAA must always follow the addition of two
pairs of packed decimal numbers (one digit in each half-byte) to obtain a
pair of valid packed decimal digits as results. The carry flag is set if
carry was needed.
DAS (Decimal Adjust after Subtraction)
adjusts the result of subtracting
two valid packed decimal operands in AL.
DAS must always follow the
subtraction of one pair of packed decimal numbers (one digit in each half-
byte) from another to obtain a pair of valid packed decimal digits as
results. The carry flag is set if a borrow was needed.

## 3.3.2 Unpacked BCD Adjustment Instructions

AAA (ASCII Adjust after Addition)
changes the contents of register AL to a
valid unpacked decimal number, and zeros the top 4 bits.
AAA must always
follow the addition of two unpacked decimal operands in AL. The carry flag
is set and AH is incremented if a carry is necessary.
AAS (ASCII Adjust after Subtraction)
changes the contents of register AL to
a valid unpacked decimal number, and zeros the top 4 bits.
AAS must always
follow the subtraction of one unpacked decimal operand from another in AL.
The carry flag is set and AH decremented if a borrow is necessary.

AAM (ASCII Adjust after Multiplication)
corrects the result of a
multiplication of two valid unpacked decimal numbers.
AAM must always follow
the multiplication of two decimal numbers to produce a valid decimal result.
The high order digit is left in AH, the low order digit in AL.

AAD (ASCII Adjust before Division)
modifies the numerator in AH and AL to
prepare for the division of two valid unpacked decimal operands so that the
quotient produced by the division will be a valid unpacked decimal number.
AH should contain the high-order digit and AL the low-order digit. This
instruction adjusts the value and places the result in AL. AH will contain
zero.

**up:**
Chapter 3 -- Applications Instruction Set

**prev:** 3.2 Binary Arithmetic Instructions

**next:** 3.4 Logical Instructions