Справочник по языку Ассемблера IBM PC

       

AAD


(Ascii Adjust before Division)

ASCII-коррекция перед делением

Схема команды:  aad 

Назначение:

подготовкa двух неупакованных BCD-чисел для операции деления;

преобразование двузначного неупакованного ВCD-числа меньшего 63h (9910) в двоичное представление.


Алгоритм работы:

умножить значение регистра ah на 10 и сложить полученное значение с содержимым регистра al: (ah*10)+al;



присвоить регистру al значение (ah*10)+al;

обнулить регистр ah.

Состояние флагов после выполнения команды:

11 07 06 04 02 00
OF SF ZF AF PF CF
? ?

Применение:


Команду aad используют для подготовки двузначного неупакованного BCD-числа в регистре ax для операции деления. Так как в системе команд микропроцессора нет команды деления для BCD-чисел, такое число нужно предварительно преобразовать в двоичный вид. Для этого старший разряд двузначного BCD-числа помещается в регистр ah, умножается на 10 и складывается с разрядом единиц двузначного BCD-числа 9 в регистре al. В результате этих действий и получается соответствующее двоичное число в регистре ax. Далее в программе уже можно применять обычную команду деления div, оперирующую двоичными данными. Команду aad можно применять и просто для преобразования неупакованного двузначного BCD-числа в его двоичный эквивалент. Есть еще интересный момент — если посмотреть на коды символов шестнадцатеричных цифр в таблице ASCII, то видно, что они похожи на BCD-числа. Исключение составляет лишь значение старшей тетрады (для BCD-числа это так называемая зона с нулевым значением) - оно равно 3. Можно сделать вывод, что если предварительно обнулить значение старшей тетрады для кодов двух символов (от 0 до 9), то эту команду вполне можно применять и для преобразования двузначных десятичных чисел в символьном представлении в их двоичный эквивалент, что и отражено в названии команды. Для иллюстрации рассмотрим два примера.

Пример 1. Разделить десятичное число 18 на 9. Подготовить результат к выводу на экран.


        mov     ah,01h  ;ah=01h         mov     al,08h  ;al=08h => ax=0108h         mov     bl,09   ;bl=09h         aаd             ;al=12h — двоичный эквивалент десятичного числа 18         div     bl      ;al=02h,ah=00h         ог      al,30h  ;al=32h — ASCII-представление числа 2, можно выводить на экран         

Пример 2. Преобразовать десятичное число 16 в символьном виде в эквивалентное двоичное число.

        mov     ax,3136h        ;ax=3136h         and     ax,0f0fh        ;ax=0106h         aаd             ;al=10h — получили его двоичный эквивалент         

См. также: уроки 3, 8, приложение 7 и команды , , , ,


Содержание раздела