DAA – коррекция сложения двоично-десятичных упакованных чисел
27 | DAA | двоично-десятичная коррекция сложения AL |
Описание.
Эта команда выполняет коррекцию результата сложения двух двоично-кодированных десятичных чисел инструкцией ADD или ADC.
Если при выполнении предшествовавшей операции сложения в младшем полубайте регистра AL получено значение, превышающее 9, или произошёл перенос из 3-го разряда в 4-ый (был установлен флажок AF), то значение младшего полубайта регистра AL увеличивается на 6, флажок AF остаётся равным 1, а флажок CF устанавливается, если при прибавлении 6 возник перенос из 3-го разряда (если переноса не было, значение флажка CF не изменяется, т.е. остаётся таким же, каким оно было до выполнения инструкции DAA). Если же содержимое младшего полубайта регистра AL не превышает 9, а флажок AF сброшен, никаких действий с младшим полубайтом не выполняется.
Затем проверяется содержимое старшего полубайта регистра AL. Если его значение больше 9 либо если установлен флажок CF (независимо от того, был ли он установлен при выполнении команды сложения или при увеличении младшего полубайта на 6 в процессе выполнения инструкции DAA), то это значение увеличивается на 6 и устанавливается флажок CF. Если же значение старшего полубайта не превышает 9, а флажок CF сброшен, никаких действий со старшим полубайтом не выполняется.
Флажки AF и CF устанавливаются в соответствии с результатом операции (см. выше).
Флажки SF, ZF и PF устанавливаются по обычным правилам в соответствии с полученным результатом.
Значение флажка OF не определено.