aam
ASCII adjust ax after multiply
Divides al by 10, or by an imm8 base, leaving the quotient in ah and the remainder in al.
8086 and laterNot available in 64-bit mode
- ● set from the result
- ? undefined afterwards
- – not changed
Forms
aamaam
Operands
imm8- An 8-bit immediate,
-128to255. Instructions that sign-extend it to a wider operand interpret the byte as-128to127; shift counts do not use this sign extension.
There are also packed BCD instructions DAA and DAS: see
DAA.
-
AAA(ASCII Adjust After Addition) should be used after a one-byteADDinstruction whose destination was theALregister: by means of examining the value in the low nibble ofALand also the auxiliary carry flagAF, it determines whether the addition has overflowed, and adjusts it (and sets the carry flag) if so. You can add long BCD strings together by doingADD/AAAon the low digits, then doingADC/AAAon each subsequent digit. -
AAS(ASCII Adjust AL After Subtraction) works similarly toAAA, but is for use afterSUBinstructions rather thanADD. -
AAM(ASCII Adjust AX After Multiply) is for use after you have multiplied two decimal digits together and left the result inAL: it dividesALby ten and stores the quotient inAH, leaving the remainder inAL. The divisor 10 can be changed by specifying an operand to the instruction: a particularly handy use of this isAAM 16, causing the two nibbles inALto be separated intoAHandAL. -
AAD(ASCII Adjust AX Before Division) performs the inverse operation toAAM: it multipliesAHby ten, adds it toAL, and setsAHto zero. Again, the multiplier 10 can be changed.