|
Правильный результат в неупакованном BCD-формате должен быть 9 (0000 1001 в двоичной системе счисления). При этом предполагается заем из старшего разряда, как при обычной команде вычитания, т. е. в случае с BCD числами фактически должно быть выполнено вычитание 16 – 7. Таким образом, видно: как и в случае сложения, результат вычитания нужно корректировать. Для этого существует специальная команда – aas (ASCII Adjust for Substraction) – коррекция результата вычитания для представления в символьном виде.
Команда aas также не имеет операндов и работает с регистром al, анализируя его младшую тетраду следующим образом:
1) если ее значение меньше 9, то флаг cf сбрасывается в 0 и управление передается следующей команде;
2) если значение тетрады в al больше 9, то команда aas выполняет следующие действия:
а) из содержимого младшей тетрады регистра al (заметьте – не из содержимого всего регистра) вычитает 6;
б) обнуляет старшую тетраду регистра al;
в) устанавливает флаг cf в 1, тем самым фиксируя воображаемый заем из старшего разряда.
Понятно, что команда aas применяется вместе с основными командами вычитания sub и sbb. При этом команду sub есть смысл использовать только один раз, при вычитании самых младших цифр операндов, далее должна применяться команда sbb, которая будет учитывать возможный заем из старшего разряда.
|