Команды AAA, AAD, AAM, AAS
Команды AAA, AAD, AAM, AAS служат для работы с двоично-десятичными числами (BCD). Двоично-десятичные числа - это форма представления числа в бинарном кодe. Каждая цифра в формате BCD представлена четырьмя битами, то есть может иметь значения от 0 до 15. Значения от 0 до 9 соответствуют цифрам от 0 до 9, остальные значения являются в формате BCD запрещенными.
Для примера посмотрим как выглядит число 258 в формате BCD: 2 - это 0010, 5 - это 0101, 8 - это 1000. Итого число 258 в формате BCD записывается как 001001011000.
Арифметические операции с такими числами можно выполнять точно также, как и с числами в обычном представлениии, за исключением того, что после операций необходимо производить двоично-десятичную коррекцию результата. Например после сложения чисел 5 и 6 получаем результат 11 (0101 + 0110 = 1011), что является запрещенным значением в BCD. Для приведения результата в нормальный для BCD вид используется команда коррекции AAA. После ее выполнения в результате получим 00010001.
Рассмотрим команды подробнее.
Команда AAA
Синтаксис: | AAA |
Операнды: | Нет |
Назначение: | ASCII-коррекция после сложения |
Процессор: | 8086+ |
Флаги: | Флаги CF и AF устанавливаются в 1, если произошел перенос из AL в AH, в противном случае они равны нулю. Значения флагов OF, SF, ZF и PF не определены. |
Комментарий: | Команда AAA корректирует сумму двух неупакованных двоично-десятичных чисел в регистре AL. Если коррекция приводит к десятичному переносу, регистр AH увеличивается на 1. Эту команду лучше использовать сразу после команды сложения двух таких чисел. |
Ограничения: | Нет |
Примеры: |
mov ax,0005h
add ax,0006h ;AX=000Bh
aaa ;AX=0101h
|
Команда AAD
Синтаксис: | AAD |
Операнды: | Нет |
Назначение: | ASCII-коррекция перед делением |
Процессор: | 8086+ |
Флаги: | Флаги SF, ZF и PF устанавливаются в соответствии с результатом. Значения флагов OF, AF и CF не определены. |
Комментарий: | Команда AAD выполняет коррекцию неупакованного двоично-десятичного числа, находящегося в регистре AX, так, чтобы последующее деление привело к десятичному результату. |
Ограничения: | Нет |
Примеры: |
mov ax,0205h mov bl,05h aad ;AX=0019h div bl ;AX=0005h |
Команда AAM
Синтаксис: | AAM |
Операнды: | Нет |
Назначение: | ASCII-коррекция после умножения |
Процессор: | 8086+ |
Флаги: | Флаги SF, ZF и PF устанавливаются в соответствии с результатом. Значения флагов OF, AF и CF не определены. |
Комментарий: | Команда AAM корректирует результат умножения неупакованных двоично-десятичных чисел, который находится в регистре AX после выполнения команды MUL, преобразовывая его в пару неупакованных двоично-десятичных чисел в регистрах AH и AL. |
Ограничения: | Нет |
Примеры: |
mov al,05h mov bl,05h mul bl ;AX=0019h aam ;AX=0205h |
Команда AAS
Синтаксис: | AAS |
Операнды: | Нет |
Назначение: | ASCII-коррекция после вычитания |
Процессор: | 8086+ |
Флаги: | Флаги CF и AF устанавливаются в 1, если произошел заем из AL в AH, в противном случае они равны нулю. Значения флагов OF, SF, ZF и PF не определены. |
Комментарий: | Команда AAS корректирует разность двух неупакованных двоично-десятичных чисел в регистре AL сразу после команды SUB или SBB. Если операция приводит к займу, регистр AH уменьшается на 1. |
Ограничения: | Нет |
Примеры: |
mov ax,0101h sub al,06h ;AX=01FBh aas ;AX=0005h |
Комментарии (0)