Основные команды языка ASSEMBLER
### 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, и вызывать
соответствующую обработку переполнения.
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|