Assembler - язык неограниченных возможностей


Десятичная арифметика - часть 3


/p>

Корректирует результат умножения неупакованных двоично-десятичных чисел, находящийся в АХ после выполнения команды MUL, преобразовывая полученный результат в пару неупакованных двоично-десятичных чисел (в АН и AL). Например:

mov al,5 mov bl,5 ; умножить 5 на 5 mul bl ; результат в АХ - 0019h aam ; теперь АХ содержит 0205h

ААМ устанавливает флаги SF, ZF и PF в соответствии с результатом и оставляет OF, AF и CF неопределенными.



Код команды ААМ — D4h 0Ah, где 0Ah — основание системы счисления, по отношению к которой выполняется коррекция. Этот байт можно заменить на любое другое число (кроме нуля), и ААМ преобразует АХ к двум неупакованным цифрам любой системы счисления. Такая обобщенная форма ААМ работает на всех процессорах (начиная с 8086), но появляется в документации Intel только с процессоров Pentium. Фактически действие, которое выполняет ААМ, — целочисленное деление AL на 0Ah (или любое другое число в общем случае), частное помещается в AL, и остаток — в АН, так что эту команду часто используют для быстрого деления в высокооптимизированных алгоритмах.

  • Команда:
  • AAD
  • Назначение:
  • ASCII-коррекция перед делением
  • Процессор:
  • 8086

    Выполняет коррекцию неупакованного двоично-десятичного числа, находящегося в регистре АХ, так, чтобы последующее деление привело к корректному десятичному результату. Например, разделим десятичное 25 на 5:

    mov ax,0205h ; 25 в неупакованном формате mov bl,5 aad ; теперь в АХ находится 19h div bl ; АХ = 0005

    Флаги SF, ZF и PF устанавливаются в соответствии с результатом, OF, AF и CF не определены.



    Так же как и команда ААМ, AAD используется с любой системой счисления: ее код — D5h 0Ah, и второй байт можно заменить на любое другое число. Действие AAD состоит в том, что содержимое регистра АН умножается на второй байт команды (0Ah по умолчанию) и складывается с AL, после чего АН обнуляется, так что AAD можно использовать для быстрого умножения на любое число.





    Начало  Назад  Вперед