AsmTool
DAA
Десятичная коррекция после сложения
Назначение:
коррекция упакованного результата сложениядвух BCD-чисел в упакованном формате.
Алгоритм работы:
команда работает только с регистром al и анализирует наличие следующих ситуаций:- Ситуация 1. В результате предыдущей команды сложения флаг af=1 или значение младшей тетрады регистра al>9. Напомним, что флаг af устанавливается в 1 в случае переноса двоичной единицы из бита 3 младшей тетрады в старшую тетраду регистра al (если значение превысило 0fh). Наличие одного из этих двух признаков говорит о том, что значение младшей тетрады превысило 9h.
- Ситуация 2. В результате предыдущей команды сложения флаг сf=1 или значение регистра al>9fh. Напомним, что флаг cf устанавливается в 1 в случае переноса двоичной единицы в старший бит операнда (если значение превысило 0ffh в случае регистра al). Наличие одного из этих двух признаков говорит о том, что значение в регистре al превысило 9fh.
Если имеет место одна из этих двух ситуаций, то регистр al корректируется следующим образом: - для ситуации 1 содержимое регистра al увеличивается на 6;
- для ситуации 2 содержимое регистра al увеличивается на 60h;
- если имеют место обе ситуации, то корректировка начинаетсяс младшей тетрады.
Состояние флагов после выполнения команды:
| 11 | 07 | 06 | 04 | 02 | 00 |
| OF | SF | ZF | AF | PF | CF |
| r | r | r | 1 | r | 1 |
Применение:
Эту команду следует применять после сложения двух упакованных BCD-чисел с целью корректировки получающегося двоичного результата сложения в правильное двузначное десятичное число. После команды daa следует анализировать состояние флага cf. Если он равен 1, то это говорит о том, что был перенос единицы в старший разряд и это нужно учесть для сложения старших десятичных цифр BCD-числа.