Основные команды языка ASSEMBLER
### BCD - фоpмат #########################################################
### В BCD - формате каждый байт содержит две десятичные цифры (по одной
в каждой тетpаде). Максимальное значение тетрады равно 9, максимальное
значение байтового числа pавно 99. Многоpазpядные числа пpедставляются
последовательностью байт. Напpимеp:
+-------------------------------+
¦ 0 0 1 1 ¦ 0 1 0 0 ¦
+-------------------------------+
0011.0100 в двоичном формате равно десятичному числу 52,
в BCD - формате равно десятичному числу 34
### С BCD - числами можно пpоизводить опеpации сложения и вычитания.
### Команда DAA #########################################################
### Производит десятичную коррекцию pезультата двоичного сложения байтовых
BCD - чисел, котоpый содеpжится в pегистpе AL.
Сложение чисел пpоизводится в два этапа: сначала байты суммиpуются как
обычные двоичные числа, а затем осуществляется коppекция pезультата по
следующим пpавилам:
1) Если флажок AF = 1 или младшая тетрада AL больше десятичной цифры 9,
то к содержимому AL прибавляется число 6 и флажок AF устанавливается в 1.
2) Если флажок CF = 1 или старшая тетрада AL больше десятичной цифры 9,
то к содержимому AL прибавляется число 60 (в BCD - фоpмате) и флажок CF
устанавливается в 1.
После коррекции в регистре AL остается упакованное десятичное число в
в диапазоне от 0 до 99.
### Устанавливает все арифметические флажки в зависимости от полученного
результата, за исключением флажков OF и AF, состояние которых
после коррекции не определено.
### Формат команды:
7 0
+-------------------------+ l = 1 байт +----------------+
¦ DAA ¦ t = 4 такта ¦ 00100111 ¦
+-------------------------+ +----------------+
### Примечание:
Переполнение определяется по флажку переноса CF. Если CF = 1,
результат сложения превысил значение 99 и в регистре AL после коррекци
остается усеченный результат (две младшие цифры).
Сложение BCD - чисел повышенной точности аналогично двоичному
сложению с повышенной точностью (смотрите ADC), но после сложения каждого
байта необходимо производить десятичную коррекцию.
Пример сложения BCD - слов:
15----------------------------------0
¦ 0 0 0 0 0 0 0 1 ¦ 1 0 0 1 1 0 0 1 ¦ Соответствует десятичному 199
-+- +-----------------------------------+
+-----------------------------------+
¦ 0 0 0 0 0 0 0 0 ¦ 1 0 0 1 0 0 1 1 ¦ Соответствует десятичному 93
+-----------------------------------+
1) Сложение младших байт командой ADD.
-----------------+
¦1 0 0 1 1 0 0 1 ¦
-+- -----------------+
-----------------+
¦1 0 0 1 0 0 1 1 ¦
-----------------+
---------------------
-----------------+ Произошел перенос из старшего
¦0 0 1 0 1 1 0 0 ¦ бита, поэтому флажок CF
-----------------+ устанавливается в состояние 1
2) Десятичная коррекция промежуточного результата:
-----------------+
¦1 0 0 1 1 0 0 1 ¦
-+- -----------------+
-----------------+ Прибавляется число 6, т.к.
¦0 0 0 0 0 1 1 0 ¦ младшая тетрада больше 9
-+- -----------------+
-----------------+ Прибавляется число 60, т.к.
¦0 1 1 0 0 0 0 0 ¦ при сложении командой ADD
-----------------+ произошел перенос (CF = 1)
---------------------
-----------------+
¦1 0 0 1 0 0 1 0 ¦ После десятичной коррекции
-----------------+
3) Сложение стаpших байт командой ADC.
+-----------------
¦ 0 0 0 0 0 0 0 1¦
-+- +-----------------
+-----------------
¦ 0 0 0 0 0 0 0 0¦
+-----------------
-+- +---+
¦ 1 ¦ флажок CF
+---+
---------------------
+-----------------
¦ 0 0 0 0 0 0 1 0¦ Флажок CF устанавливается в 0
+-----------------
4) Десятичная коррекция сложения старших байт не изменяет промежуточного
результата, т.к. значения тетрад допустимые и флажок CF = 0.
5) Окончательный Результат соответствует десятичному числу 292.
+-----------------------------------+
¦ 0 0 0 0 0 0 1 0 ¦ 1 0 0 1 0 0 1 0 ¦
+-----------------------------------+
### Команда DAS #########################################################
### Производит десятичную коррекцию результата двоичного вычитания
байтовых BCD - чисел, который содержится в регистре AL.
Вычитание производится в два этапа: сначала осуществляется вычитание
как для обычных двоичных чисел, а затем корректируется результат по
следующим правилам:
1) Если флажок AF = 1 или младшая тетрада AL больше десятичной цифры 9,
то из содержимого AL вычитается число 6 и флажок AF устанавливается в 1.
2) Если флажок CF = 1 или старшая тетрада AL больше десятичной цифры 9,
то из содержимого AL вычитается число 60 и флажок CF устанавливается в 1.
### Устанавливаются все арифметические флажки в зависимости от полученного
результата, за исключением флажков OF и AF, состояние которых после
коррекции не определено. Флажок CF интерпретируется как флажок заема, он
равен 1, если вычитаемое больше уменьшаемого.
### Формат команды:
7 0
+-------------------------+ l = 1 байт +----------------+
¦ DAS ¦ t = 4 такта ¦ 00101111 ¦
+-------------------------+ +----------------+
### Примечание:
Вычитание BCD - чисел с повышенной точностью аналогично двоичному
вычитанию с повышенной точностью (смотрите SBB). Но после каждого
байтового вычитания необходимо производить десятичную коррекцию.
Пример вычитания BCD - слов:
15----------------------------------0
¦ 0 0 0 0 0 0 1 1 ¦ 0 0 0 0 0 1 1 1 ¦ Соответствует десятичному 307
--- +-----------------------------------+
+-----------------------------------+
¦ 0 0 0 0 0 0 1 0 ¦ 0 0 0 0 1 0 0 0 ¦ Соответствует десятичному 208
+-----------------------------------+
1) Вычитание младших байт командой SUB.
-----------------+
¦0 0 0 0 0 1 1 1 ¦
--- -----------------+
-----------------+
¦0 0 0 0 1 0 0 0 ¦
-----------------+
---------------------
-----------------+ Произошло два заема, поэтому
¦1 1 1 1 1 1 1 1 ¦ флажки AF и CF устанавливаются
-----------------+ в состояние 1
2) Десятичная коррекция промежуточного результата:
-----------------+
¦1 1 1 1 1 1 1 1 ¦
--- -----------------+
-----------------+ Вычитается число 6, т.к. AF = 1
¦0 0 0 0 0 1 1 0 ¦ и младшая тетрада больше 9
--- -----------------+
-----------------+ Вычитается число 60, т.к. СF = 1
¦0 1 1 0 0 0 0 0 ¦ и старшая тетрада больше 9.
-----------------+ Флажок CF остается в состоянии 1
---------------------
-----------------+
¦1 0 0 1 1 0 0 1 ¦ После десятичной коррекции
-----------------+
3) Вычитание стаpших байт командой SBB.
+-----------------
¦ 0 0 0 0 0 0 1 1¦
--- +-----------------
+-----------------
¦ 0 0 0 0 0 0 1 0¦
+-----------------
--- +---+
¦ 1 ¦ флажок CF
+---+
---------------------
+-----------------
¦ 0 0 0 0 0 0 0 0¦ Флажок CF устанавливается в 0
+-----------------
4) Десятичная коррекция вычитания старших байт не изменяет промежуточного
результата, т.к. значения тетрад допустимые и флажок CF = 0.
5) Окончательный Результат соответствует десятичному числу 99.
+-----------------------------------+
¦ 0 0 0 0 0 0 0 0 ¦ 1 0 0 1 1 0 0 1 ¦
+-----------------------------------+
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|