(Ascii Adjust after Addition)
ASCII-коррекция после сложения
Назначение: корректировка неупакованного результата сложения двух одноразрядных неупакованных BCD-чисел.
Синтаксис
Алгоритм работы:
- проанализировать значение младшего полубайта регистра al и значение флага af;
- если (значение младшего полубайта регистра al >9) или (AF=1), то выполнить следующие действия:
- увеличить значение al на 6;
- очистить старший полубайт регистра al;
- увеличить значение ah на 1;
- установить флаги: af = 1, cf = 1,
иначе сбросить флаги af = 0 и cf = 0.
Состояние флагов после выполнения команды:
|
|
|
|
|
|
OF
| SF
| ZF
| AF
| PF
| CF
|
?
| ?
| ?
| r
| ?
| r
|
Применение:
Обычно команда aaa используется после сложения каждого разряда распакованных BCD-чисел командой add. Каждая цифра неупакованного BCD-числа занимает младший полубайт байта. Если результат сложения двух одноразрядных BCD-чисел больше 9, то число в младшем полубайте результата не есть BCD-число. Поэтому результат нужно корректировать командой aaa. Эта команда позволяет сформировать правильное BCD-число в младшем полубайте и запомнить единицу переноса в старший разряд путем увеличения содержимого регистра ah на 1.
К примеру, сложить два неупакованных BCD-числа: 08 + 05:
mov ah,08h ;ah=08h mov al,05h ;al=05h add al,ah ;al=al+ah=05h+08h=0dh — не BCD-число xor ah,ah ;ah=0 aaa ;ah=01h,al=03h — результат скорректирован |
См. также: урок 8, приложение 7 и команды aad, aam, aas, daa, das