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

    Когда в программе перемножаются два неупакованных десятичных числа,

    результат в регистре AL является двоичным числом. Поскольку

    наибольшее неупакованное десятичное в двоичном представлении число

    равно 9, то максимальный результат при BCD-умножении без упаковки

    равен 81. Однако, этот результат не является значимым неупакованным

    BCD-представлением этого числа. Команда символьной коррекции для

    умножения (AAM - от ASCII Adjust for Multiply) переводит такой

    двоичный результат в неупакованный десятичный. Командой AAM старшая

    десятичная цифра результата помещается в регистр AH, а в AL

    остается младшая десятичная цифра. Например, если программа

    перемножает значения 6 и 7 и результат в AL равен 2AH, то команда

    AAM преобразует результат, помещая в AH 04H, а в AL - 02H, что

    соответсвует неупакованному десятичному числу 42 в регистрах AH:AL.

 

      Команда AAM вычисляет распакованный десятичный результат с

    помощью деления числа в регистре AL на 10. Она помещает частное в

    регистр AH, оставляя остаток в регистре AL. Команда AAM

    устанавливает флаги нуля и знака в соответствии с результатом в

    регистре AL. Так как результат - распакованное десятичное число,

    знак всегда положителен, а знак нуля устанавливается равным 1,

    только если исходное число кратно 10 - т.е. если младшая значащая

    десятичная цифра равна 0. Остальные флаги после команды AAM

    остаются неопределенными. Флаг переноса теперь не имеет смысла,