Проверьте правильность работы программы сложения «вручную» по аналогии с п. 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 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.