Справочник по языку Ассемблера IBM PC

     

DAA


(Decimal Adjust for Addition)

Десятичная коррекция после сложения

 

Схема команды:  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 1

Состояние флагов после выполнения команды (в случае, если переносов не было):

11 07 06 04 02 00
OF SF ZF AF PF CF
r r r 0 0

Применение:


Эту команду следует применять после сложения двух упакованных BCD-чисел с целью корректировки получающегося двоичного результата сложения в правильное двузначное десятичное число. После команды daa следует анализировать состояние флага cf. Если он равен 1, то это говорит о том, что был перенос единицы в старший разряд и это нужно учесть для сложения старших десятичных цифр BCD-числа.

        mov     al,69h  ;69h — упакованное BCD-число         mov     bl,74h  ;74h — упакованное BCD-число         adc     al,bl   ;al=0ddh         daa             ;cf=1, al=43h ;если перенос, то переход на ту ветвь программы, ;где он будет учтен:         jc m1         

См. также: урок 8, Приложение 7 и команды , , , ,



Содержание раздела