Однокристальные микроконтроллеры семейства MCS-51. Арифметические команды. Операции сложения и вычитания с 8-разрядными операндами, страница 6

На 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