Деление неупакованных BCD-чисел
Процесс выполнения операции деления двух неупакованных BCD-чисел несколько отличается от других, рассмотренных ранее, операций с ними. Здесь также требуются действия по коррекции, но они должны выполняться до основной операции, выполняющей непосредственно деление одного BCD-числа на другое BCD-число. Предварительно в регистре ax нужно получить две неупакованные BCD-цифры делимого. Это делает программист удобным для него способом. Далее нужно выдать команду aad:
aad (ASCII Adjust for Division) — коррекция деления для представления в символьном виде.
Команда не имеет операндов и преобразует двузначное неупакованное BCD-число в регистре ax в двоичное число. Это двоичное число впоследствии будет играть роль делимого в операции деления. Кроме преобразования, команда aad помещает полученное двоичное число в регистр al. Делимое, естественно, будет двоичным числом из диапазона 0...99.
Алгоритм, по которому команда aad осуществляет это преобразование, состоит в следующем:
умножить старшую цифру исходного BCD-числа в ax (содержимое ah) на 10;
выполнить сложение ah + al, результат которого (двоичное число) занести в al;
обнулить содержимое ah.
Далее программисту нужно выдать обычную команду деления div для выполнения деления содержимого ax на одну BCD-цифру, находящуюся в байтовом регистре или байтовой ячейке памяти.
Деление неупакованных BCD-чисел иллюстрируется листингом 11.
Листинг 11. Деление неупакованных BCD-чисел <1> ;prg_8_11.asm <2> ... <3> .data ;сегмент данных <4> b db 1,7 ;неупакованное BCD-число 71 <5> c db 4 ; <6> ch db 2 dup (0) <7> .code ;сегмент кода <8> main: ;точка входа в программу <9> ... <10> mov al,b <11> aad ;коррекция перед делением <12> div c ;в al BCD-частное, в ah BCD-остаток <13> ... <14> exit: |
Аналогично aam, команде aad можно найти и другое применение — использовать ее для перевода неупакованных BCD-чисел из диапазона 0...99 в их двоичный эквивалент.
Для деления чисел большей разрядности, так же как и в случае умножения, нужно реализовывать свой алгоритм, например “в столбик”, либо найти более оптимальный путь.