Команды коррекции. (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 в две упакованные десятичные цифры.