Команды десятичной коррекции

Опубликовано февраля 1, 2018 в Архитектура процессора Intel

Команды десятичной коррекции

DAA (Decimal Adjust AL after Addition) — десятичная коррекция после сложения.

Корректирует результат предыдущего сложения в AL, преобразуя его в упакованное (BCD) двоично-десятичное число.

Сравнивается младшая тетрада на условие AL > 9 и флаг AF на его установку, если хотя бы одно из этих условий выполнено, то к младшей тетраде добавляется корректирующий код 6. Аналогичная проверка проводится для старшей тетрады со сравнением флага CF. Если значение этой тетрады будет > 9 или флаг CF установлен, добавляется корректирующий код 6 в старшую тетраду. Значения флагов AF и CF после выполнения команды свидетельствует о наличии (установка флага) или отсутствии (сброс флага) коррекции соответствующих тетрад.

Команды десятичной коррекции

Команды ASCII-коррекции

AAA (ASCII Adjust after Addition) — ASCII-коррекция после сложения. Корректирует результат сложения в AL преобразуя его в неупакованный (ASCII) формат цифр (0... 9).

Если младшая тетрада результата в AL > 9 или установлен флаг AF, осуществляется сложение AL с кодом 6. сброс старшей тетрады AL в ноль и установка обоих флагов CF и AF, а также инкремент АН. В противном случае осуществляется сброс флагов AF и CF.

Платный европейский хостинг в Германии от компании AdminVPS — это надежное серверное оборудование, европейское качество и комплекс услуг по системе «Всё Включено».

AAS — ASCII Adjust after Subtraction — ASCII-коррекция после вычитания.

Команду AAS нужно выполнять только после команды SUB, которая оставляет байтный результат в регистре AL. Младшие тетрады операндов команды SUB должны находиться в диапазоне 0...9. В этом случае команда AAS корректирует регистр AL так, чтобы он содержал правильную десятичную цифру результата. Если число в AL перед AAS больше 9, то АП уменьшается на 1 и устанавливаются AF и CF. Если число в AL перед AAS меньше 9, то Aid не изменяется. В любом случае старшая тетрада регистра AL содержит 0.

Влияние на флаги:

Флаги AF и CF установлены в 1 при наличии десятичного переноса, а при отсутствии сброшены; флаги OF, SF, ZF, PF — не определены.

ААМ (ASCII Adjust АХ after Multiply) — ASCII-коррекция после умножения.

Эта команда преобразует результат двоичного умножения 2-х десятичных цифр из регистра AL в 2-х разрядное десятичное неупакованное число в регистре АХ.

Фактически ее действия сводятся к делению двоичного числа из AL на 10 и помещению частного как старших цифр в АН, а остатка как младших цифр в AL. Для корректного применения этой команды после команды MUL необходимо предварительно осуществить сброс старших тетрад байтных операндов.

AAD (ASCII Adjust AX before Division) — ASCII-коррекция регистра перед делением.

В отличие от других команд коррекции, команда AAD корректирует не результат, а операнд (делимое), превращая неупакованное десятичное число из регистра АХ в двоичное число, которое помещается в регистр AL. Эта команда, как правило, используется перед командой DIV.

Для корректного использования команд в отношении ASCII-кода 2-х цифр необходимо после помещения их в регистр АХ осуществить сброс старших тетрад. Фактически действие команды сводится к умножению содержимого АН на 10 и к сложению полученного результата с AL.