###
ASCII - фоpмат
######################################################
### В ASCII - формате каждый байт содержит одну десятичную цифру в младшей
тетраде, старшая тетрада содержит нули. Максимальное значение
байтового
числа pавно 9. Многоpазрядные числа представляются
последовательностью
байт. Например:
15------------------------------7-------------------------------0
¦ 0 0 0 0 ¦ 1
0 0 0 ¦ 0
0 0 0 ¦ 0
0 0 1 ¦
+---------------------------------------------------------------+
0000.1000.0000.0001 в двоичном формате равно
десятичному числу 2049,
в ASCII - формате равно
десятичному числу 81
### С ASCII - числами можно производить любые арифметические
операции.
### Команда AAA
#########################################################
### Производит символьную коррекцию результата двоичного сложения байтовых
ASCII - чисел, который содержится в аккумуляторе AL.
Сложение ASCII - чисел производится
в два этапа:
сначала байты
суммируются как обычные двоичные числа, а затем осуществляется
коррекция
по следующим правилам:
1) Если младшая тетрада AL меньше или равна
десятичному числу 9 и
флажок AF = 0, то переход к шагу 3).
2) Если младшая тетрада AL больше десятичного числа 9 и
флажок AF = 1,
то к содержимому AL прибавляется
число 6, к содержимому регистра AH
прибавляется единица,
а флажок AF
устанавливается в
1.
3) Сбрасывается старшая тетрада
аккумулятора AL.
4) Флажок CF устанавливается в
то же состояние,
что и флажок AF.
### Флажки CF и AF устанавливаются в 1, если результат суммирования больше
числа 9. Состояние остальных флажков не определено.
### Формат команды:
7
0
+-------------------------+ l = 1 байт
+----------------+
¦ AAA
¦ t = 4 такта
¦ 00110111
¦
+-------------------------+
+----------------+
### Примечание:
Сложение ASCII - чисел с повышенной
точностью похоже на
двоичную
арифметику с повышенной точностью, но после
сложения каждого байта
необходимо производить символьную коррекцию.
### Команда AAS
#########################################################
### Производит символьную коррекцию результата
двоичного вычитания
байтовых ASCII - чисел, который содержится в
регистре AL.
Вычитание производится в два этапа: сначала
осуществляется вычитание
как для обычных двоичных чисел, а затем
результат корректируется по
следующим правилам:
1) Если младшая тетрада AL меньше или равна
десятичному числу 9 и
флажок AF = 0, то переход к шагу 3).
2) Если младшая тетрада AL больше десятичного числа 9 и
флажок AF = 1,
то из содержимого AL вычитается число
6, из содержимого регистра AH
вычитается единица, а флажок AF
устанавливается в 1.
3) Сбрасывается старшая тетрада аккумулятора AL.
4) Флажок CF устанавливается в то же состояние, что и
флажок AF.
### Флажки AF и CF устанавливаются в
1, если вычитаемое
больше
уменьшаемого (AF и CF интерпретируются как
флажки заема). Состояние
остальных флажков не определено.
### Формат команды:
7
0
+-------------------------+ l = 1 байт
+----------------+
¦ AAS
¦ t = 4 такта
¦ 00111111
¦
+-------------------------+
+----------------+
### Примечание:
Вычитание ASCII - чисел с повышенной
точностью похоже на
двоичную
арифметику с повышенной точностью, но после каждого
байтового вычитания
необходимо производить символьную коррекцию.
### Команда AAM
#########################################################
### Производит символьную коррекцию результата умножения байтовых
ASCII -
чисел, который содержится в регистре AL.
Умножение ASCII - чисел
производится в
два этапа:
сначала
осуществляется умножение командой MUL, а затем результат корректируется по
следующим правилам:
1) Содержимое регистра AL делится на число 10.
2) Частное загружается в регистр AH, а остаток - в
регистр AL.
### Состояние флажков SF, ZF, PF зависит от
содержимого регистра AL.
Состояние флажков OF, AF, CF не определено.
### Формат команды:
7
0
+-------------------------+ l = 2 байта
+----------------+
¦ AAM
¦ t = 83 такта
¦ 11010100
¦
+-------------------------+
¦----------------¦
¦ 00001010
¦
+----------------+
### Примечание:
Команду AAM можно использовать
для деления двоичного числа
на 10.
Частное помещается в регистр AH, остаток - в регистр AL.
### Команда AAD
#########################################################
### Производит символьную коррекцию содержимого регистра АХ по
следующим
правилам:
1) Содержимое регистра AH умножается
на число 10.
2) Полученный результат прибавляется
к содержимому
регистра AL.
3) Содержимое регистра AH
сбрасывается.
Деление ASCII - чисел производится в два этапа:
сначала двухбайтовое
ASCII - делимое преобразуется в двоичное число в
регистре AL, а затем
командой DIV содержимое регистра AX делится на
байтовое ASCII - число.
После деления в регистре AL остается частное, а в регистре
AH - остаток.
### Состояние флажков SF, ZF, PF зависит от
содержимого регистра AL.
Состояние флажков OF, AF, CF не определено.
### Формат команды:
7
0
+-------------------------+ l = 2 байта
+----------------+
¦ AAD
¦ t = 60 тактов
¦ 11010101
¦
+-------------------------+
¦----------------¦
¦ 00001010
¦
+----------------+
### Применение и особенности программирования:
Если делитель равен 0,
генерируется прерывание
типа 0. Если в
программе нет обработки такого
прерывания, необходимо
до операции
проверить возможность возникновения деления на
0.
Может оказаться, что частное
- это не одна
десятичная цифра
(например, когда число 40 делится на
2). При этом
переполнение не
возникает, поэтому после каждой последовательности
команд AAD - DIV
необходимо проверять, не превысило ли
частное числа 9, и
вызывать
соответствующую обработку переполнения.
|