Команда DA A
Команда десятичная коррекция аккумулятора для сложения" упорядочивает 8-битовую величину в аккумуляторе после выполненной ранее команды сложения двух переменных (каждая в упакованном двоично-десятичном формате). Для выполнения сложения может использоватться любая из типов команд ADD или ADDC. Если значение битов 3-0 аккумулятора (А) превышает 9 (ХХХХ 1010-ХХХХ 1111) или, если флаг АС равен "1", то к содержимому (А) прибавляется 06, получая соответствующую двоично-десятичную цифру в младшем полубайте. Это внутреннее побитовое сложение устанавливает флаг переноса, если перенос из поля младших четырех бит распространяется через все старшие биты, а в противном случае - не изменяет флага переноса. Если после этого флаг переноса равен "1", или значение четырех старших бит (7-4) превышает 9 (1010 ХХХХ - 1111 ХХХХ), значения этих старших бит увеличивается на 6, создавая соответствующую двоично-десятичную цифру в старшем полубайте. И снова при этом флаг переноса устанавливается, если перенос получается из старших битов, но не изменяется в противном случае. Таким образом, флаг переноса указывает на то, что сумма двух исходных двоично-десятичных переменных больше чем 100. Эта команда выполняет десятичное преобразование с помощью сложения 06, 60, 66 с содержимым аккумулятора в зависимости от начального состояния аккумулятора и слова состояния программы (PSW).
Ассемблер: |
DA A |
Код: |
|
Время: |
1 цикл |
Алгоритм: |
если ((A[3-0])>9 или (AC)=1), то A[3-0]:=A[3-0]+6
если ((A[7-4])>9 или (С)=1), то А[7-4]:=A[7-4]+6 |
Пример: |
a) ;(A)=56H, (R3)=67H, (C)=1
ADDC A,R3
DA A ;(A)=24H, (R3)=67H, (C)=1
b) ;(A)=30H, (C)=0
ADD A, #99H
DA A ;(A)=29, (C)=1
|
Примечание. Команда DA A не может просто преобразовать шестнадцатеричное значение в аккумуляторе в двоично-десятичное представление и не применяется, например, для десятичного вычитания.
|