Меню сайта

Урок 59. Символьная коррекция: умножение

Когда в программе перемножаются дванеупакованных десятичных числа,
— — — результат в регистре AL является двоичнымчислом. Поскольку
— — — наибольшее неупакованное десятичное вдвоичном представлении число
— — — равно 9, то максимальный результат приBCD-умножении без упаковки
— — — равен 81. Однако, этот результат неявляется значимым неупакованным
— — — BCD-представлением этого числа. Командасимвольной коррекции для
— — — умножения (AAM — от ASCII Adjust forMultiply) переводит такой
— — — двоичный результат в неупакованныйдесятичный. Командой AAM старшая
— — — десятичная цифра результата помещается врегистр AH, а в AL
— — — остается младшая десятичная цифра.Например, если программа
— — — перемножает значения 6 и 7 и результат вAL равен 2AH, то команда
— — — AAM преобразует результат, помещая в AH04H, а в AL — 02H, что
— — — соответсвует неупакованному десятичномучислу 42 в регистрах AH:AL.

— — — — — Команда AAM вычисляет распакованныйдесятичный результат с
— — — помощью деления числа в регистре AL на 10.Она помещает частное в
— — — регистр AH, оставляя остаток в регистреAL. Команда AAM
— — — устанавливает флаги нуля и знака всоответствии с результатом в
— — — регистре AL. Так как результат -распакованное десятичное число,
— — — знак всегда положителен, а знак нуляустанавливается равным 1,
— — — только если исходное число кратно 10 -т.е. если младшая значащая
— — — десятичная цифра равна 0. Остальные флагипосле команды AAM
— — — остаются неопределенными. Флаг переносатеперь не имеет смысла,
— — — потому что умножение двух распакованныхдесятичных чисел никогда не
— — — дает результата, превосходящего число,представимое двумя
— — — десятичными цифрами.

— — — — — Программа также всегда может использоватькоманду AAM для
— — — деления двоичного числа в регистре AL на10. В таком виде она может
— — — рассматриваться, как специальный случайкоманды деления, которая
— — — делит однобайтовое число в регистре AL на10. Частное помещается в
— — — регистр AH, остаток — в регистр AL.

Категория: Программирование на Ассемблере | Дата: 08.02.13

Меню раздела
Блок