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

Проверьте правильность  работы программы сложения «вручную» по аналогии с п. 3.1.1.

При использовании косвенной адресации программа сложения имеет вид:

MOV  A, R7      ; Пересылка в аккумулятор

MOV  R0, #30H  ; Загрузить в регистр R0 адрес ячейки ПД

ADD  A, @R0     ; Сложение с содержимым ячейки 30H

NOP

Запишите программу в память симулятора и исследуйте ее работу в пошаговом режиме при различных исходных данных. Результаты занесите в табл. 4.2.

Таблица 4.2

Исходные данные

Получено

Практически

Теоретически

Регистр  R7

Ячейка  30H

Регистр  A      

Флаг  C

Регистр  A

Флаг  C

11H

55H

CCH

55H

Проверьте правильность работы программы сложения «вручную».

3.1.3. Рассмотрим команды ADDC сложения с учетом переноса C. Эти команды позволяют производить суммирование многобайтных чисел длиной 16, 24 и более разрядов. При этом сложение должно производиться по байтам, начиная с младших.

Так, операция сложения двухбайтных чисел 17F5H и 3411H будет производиться следующим образом:

Старший          Перенос C              Младший                HEX-код байт                                                  байт

1-е слагаемое             00010111                                          11110101                    17F5H

+                                                             +                                   +

2-е слагаемое             00110100                                          00010001                    3411H

+                                                                                                  +

Перенос C                                 1             ß 1  ß

-----------------------------------------                                       --------------                 ----------Результат                    01001100                                          00000110                    4C06H

Из рассмотренного примера видно, что при суммировании младших байтов чисел необходимо применять команды ADD, а при сложении остальных – команды ADDC, которые будут учитывать состояние флага переноса C. Если в результате сложения всех байтов установится флаг C=1, то это укажет на переполнение суммы.

Рассмотрим примеры сложения многобайтных двоичных чисел.

1. Нужно сложить два двоичных числа, расположенных в памяти данных. Первое число находится в ячейках 30H (МлБ) и  31H (СтБ). Второе число – в ячейках 38H (МлБ) и 31H (СтБ). Результат сложения (сумму) поместить в регистр DPTR. Подпрограмма сложения с именем ADD_1 при использовании прямой адресации ячеек памяти имеет вид:

DATA1:    EQU       30H       ; Символический адрес МлБ 1-го слагаемого

DATA2:    EQU       38H       ; Символический адрес МлБ 2-го слагаемого

ADD_1:    MOV   A, DATA1    ; Пересылка в аккумулятор МлБ 1-го числа

ADD   A, DATA2    ; Сложение младших байтов

MOV  DPL, A          ; Пересылка в регистр DPL МлБ суммы

MOV   A, DATA1+1   ; Пересылка в аккумулятор СтБ 1-го числа

ADDC  A, DATA2+1  ; Сложение старших байтов с учетом переноса

MOV   DPH, A            ; Пересылка в регистр DPH  СтБ суммы

RET                              ; Возврат из подпрограммы

END                             ; Конец программного модуля

Так как программа содержит символические имена ячеек ПД, то ее невозможно непосредственно записать в память симулятора. Поэтому выйдите из DOS в WINDOWS и создайте файл add_1.asm, в который запишите текст подпрограммы ADD_1. Затем получите файлы add_1.obj и add_1.hex. Проверьте работу программы с помощью симулятора AVSIM51 в пошаговом режиме, результаты занесите в табл.4.3.

Таблица 4.3

Исходные данные

Получено

Практически

Теоретически

Число  1

Число  2

DPTR

Флаг   C

DPTR

Флаг  C

BBAAH

2211H

BBAAH

DDCCH