Команды коррекции. (19 билет)

Для коррекции операции сложения двух однозначных неупакованных BCD-чисел в системе команд микропроцессора существует специальная команда

AAA (ASCII Adjust for Addition) — коррекция результата сложения для представления в символьном виде. Эта команда не имеет операндов. Она работает неявно только с регистром AL и анализирует значение его младшей тетрады:

- если это значение меньше 9, то флаг CF сбрасывается в 0 и осуществляется переход к следующей команде;

если это значение больше 9, то выполняются следующие действия:

- к содержимому младшей тетрады AL (но не к содержимому всего регистра!) прибавляется 6, тем самым значение десятичного результата корректируется в правильную сторону;

- флаг CF устанавливается в 1, тем самым фиксируется перенос в старший разряд, для того чтобы его можно было учесть в последующих действиях.

AAS (ASCII Adjust for Substraction) — коррекция результата вычитания для представления в символьном виде. Команда AAS также не имеет операндов и работает с регистром AL, анализируя его младшую тетраду следующим образом:

- если ее значение меньше 9, то флаг CF сбрасывается в 0 и управление передается следующей команде;

- если значение тетрады в AL больше 9, то команда AAS выполняет следующие действия:

-из содержимого младшей тетрады регистра AL вычитает 6;

- обнуляет старшую тетраду регистра al;

- устанавливает флаг CF в 1, тем самым фиксируя воображаемый заем из старшего разряда.

AAM (ASCII Adjust for Multiplication) — коррекция результата умножения для представления в символьном виде. Она не имеет операндов и работает с регистром AX следующим образом:

- делит AL на 10;

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

В результате после выполнения команды AAM в регистрах AL и AH находятся правильные двоично-десятичные цифры произведения двух цифр.

AAD (ASCII Adjust for Division) — коррекция деления для представления в символьном виде.

Команда не имеет операндов и преобразует двузначное неупакованное BCD-число в регистре AX в двоичное число. Это двоичное число впоследствии будет играть роль делимого в операции деления. Кроме преобразования, команда AAD помещает полученное двоичное число в регистр AL. Делимое, естественно, будет двоичным числом из диапазона 0...99.

Алгоритм, по которому команда AAD осуществляет это преобразование, состоит в следующем:

- умножить старшую цифру исходного BCD-числа в AX (содержимое AH) на 10;

- выполнить сложение AH + AL, результат которого (двоичное число) занести в AL;

- обнулить содержимое AH.

AAD ; коррекция перед делением

DIV C

DAS (Decimal Adjust for Substraction) — коррекция результата вычитания для представления в десятичном виде. Команда DAS преобразует содержимое регистра AL в две упакованные десятичные цифры.