На 2-м этапе производим коррекцию старшей тетрады содержимого аккумулятора. Поскольку старшая тетрада больше 9, то к ней прибавляется число 6:
Переносы 1 ß 1 ß 1 ß 1
1 0 1 1 0 1 1 1
+
0 1 1 0
-----------------------------------------------------------0 0 0 1 0 1 1 1
Таким образом, в аккумуляторе будет число 17H (десятичное число 17 в упакованном формате), а флаг переноса окажется установлен C = 1.
Проверим результат сложения по правилам десятичной арифметики: 79 + 38 = 117.
Результат получен правильный. Следует отметить, что команда DA A корректирует результат только сложения десятичных двоично-кодированных чисел. Коррекция результата вычитания десятичных чисел выполняется по специальным программам.
3.5.1. Занесите в память симулятора коды программы сложения двух десятичных чисел 53 и 39:
MOV A, #53H ; Загрузить в аккумулятор число 53H
ADD A, #39H ; Сложение с числом 39H
DA A ; Десятичная коррекция аккумулятора
NOP
Выполните программу сложения в пошаговом режиме без команды десятичной коррекции аккумулятора. Занесите содержимое аккумулятора в левую колонку табл.4.6.
Таблица 4.6
Содержимое аккумулятора |
|||
Получено практически |
Получено теоретически |
||
Без коррекции |
С коррекцией |
Без коррекции |
С коррекцией |
Затем выполните программу сложения с командой коррекции содержимого аккумулятора. Занесите результат также в табл. 4.6.
Выполните проверку правильности работы программы «вручную». Сначала проведите сложение по правилам двоичной арифметики, а затем произведите десятичную коррекцию содержимого аккумулятора. Результаты занесите в табл. 4.6. Проанализируйте полученные результаты.
3.6. Команда умножения
Команда MUL AB вычисляет произведение двух целых беззнаковых двоичных чисел, хранящихся в регистрах A и B. Младший байт произведения размещается в аккумуляторе A, а старший байт – в регистре-расширителе B. Если содержимое регистра B оказывается равным нулю, то флаг OV сбрасывается, иначе – устанавливается. Флаг переноса C всегда сбрасывается.
3.6.1. Занесите в память симулятора команду MUL AB. Исследуйте работу ее при различных значениях параметров. Результаты занесите в табл. 4.7.
Таблица 4.7
Исходные значения |
Получено |
||||||||
Практически |
Теоретически |
||||||||
Рег. A |
Рег. B |
Рег. A |
Рег. B |
C |
OV |
Рег. A |
Рег. B |
С |
OV |
BBH |
AAH |
||||||||
A0H |
C8H |
||||||||
10H |
05H |
Проверить правильность умножения можно с помощью калькулятора.
3.7. Команда деления
Команда деления DIV AB производит деление содержимого аккумулятора на содержимое регистра-расширителя B. После деления в аккумуляторе находится целая часть частного, а в расширителе – остаток. Флаги C и OV сбрасываются. При делении на нуль устанавливается флаг переполнения OV, а частное остается неопределенным.
3.7.1. Занесите в память симулятора команду DIV AB. Исследуйте работу команды в пошаговом режиме при различных значениях параметров. Данные занесите в табл. 4.8.
Таблица 4.8
Исходные значения |
Получено |
||||||||
Практически |
Теоретически |
||||||||
Рег. A |
Рег. B |
Рег. A |
Рег. B |
C |
OV |
Рег. A |
Рег. B |
С |
OV |
0AH |
02H |
||||||||
05H |
00H |
||||||||
05H |
0FH |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.