(Ascii Adjust after Multiply)
ASCII-коррекция после умножения
Назначение:
- корректировка результата умножения двух неупакованных BCD-чисел;
- преобразование двоичного числа меньшего 63h (9910) в его неупакованный BCD-эквивалент.
Синтаксис
Алгоритм работы:
- разделить значение регистра al на 10;
- записать частное в регистр ah, остаток — в регистр al.
Состояние флагов после выполнения команды:
|
|
|
|
|
|
OF
| SF
| ZF
| AF
| PF
| CF
|
?
| r
| r
| r
| r
| ?
|
Применение:
Команду aam используют для коррекции результата умножения двух неупакованных BCD-чисел. Специальной команды умножения BCD-чисел нет. Поэтому BCD-числа умножаются поразрядно, как обычные двоичные числа, командой mul. Максимальное число, которое получается при таком умножении, — это 9*9=8110=5116. Отсюда понятно, что значения, для которых командой aam можно получить их двузначный BCD-эквивалент в регистре ax, находятся в дипазоне от 00h до 51h. Эту команду можно применять и для преобразования двоичного числа из регистра ax (в диапазоне от 0 до 63h) в его десятичный эквивалент(соответственно, из диапазона от 0 до 9910).
Пример 1. Умножить десятичное число 8 на 9. Подготовить результат к выводу на экран.
mov ah,08h ;ah=08h mov al,09h ;al= 09h mul ah ;al=48h — двоичный эквивалент 72 aam ;ah=07h,al=02h or ax,3030h ;ax=3732h — ASCII-представление числа 72 |
Пример 2. Преобразовать двоичное число 60h в эквивалентное десятичное число.
;поместим число 60h в регистр ax mov ax,60h ;ax=60h aаm ;ax=0906h — получили десятичный эквивалент числа 60h or ax,3030h ;символьный эквивалент, можно выводить на экран |
См. также: урок 8, приложение 7 и команды aaa, aad, aas, daa, das