4.4.6. Симовльная коррекция: сложение и вычитание

Команды символьной коррекции очень похожи на команды десятичной коррекции. Они следуют за сложением или вычитанием распакованных десятичных чисел. В тех же случаях, в которых программа использует команды десятичной коррекции DAA и DAS для упакованных десятичных чисел, она использует символьную коррекцию для распакованных десятичных чисел. В распакованных десятичных числах цифры от 0 до 9 представляются одним байтом. Такая конструкция числа называется символьной десятичной из-за того, что такие числа просто преобразовывать в символьный вид и наоборот (прибавлять и вычитать 30H, соответственно).

После сложения двух распакованных десятичных чисел программа обычно выполняет команду символьной коррекции при сложении AAA, которая преобразует результат в правильное распакованное представление десятичного числа. Правила сложения идентичны правилам для упакованных десятичних чисел. Поскольку сложение двух распакованных десятичных чисел может дать в результате число, большее 9, командам AAA и AAS требуется для работы не только регистр AL. В случае команды AAA младшая цифра скорректированного результата остается в регистре AL. Если десятичное сложение привело к переносу из младшей цифры, команда AAA устанавливает равными 1 флаги переноса и дополнительного переноса. В других случаях она сбрасывает их в 0. Содержимое других флагов не определено после команды коррекции. Команды символьной коррекции отличаются от десятичных команд тем, что они влияют на содержимое регистра AH, а также устанавливают флаг переноса, если есть перенос из младшей значащей цифры.

Символьная коррекция вычитания AAS используется в программе после вычитания одного распакованного десятичного числа из другого, и результат этой байтовой операции должен быть помещен в регистр AL. Результат команды символьной коррекции остается в регистре AL, и если вычитание привело к появлению заема, команда AAS уменьшает регистр AH, а также устанавливает флаги переноса и дополнительного переноса. В противном случае флаги сбрасываются. Другие флаги после команды не определены.