MOV DPL,A ; Пересылка МлБ суммы в регистр DPTR
INC R0
INC R1
MOV A,@R0
ADDC A,@R1 ; Сложение старших байтов с учетом переноса
MOV DPH,A ; Пересылка СтБ суммы в DPTR
RET
END ; Конец программного модуля
Задание 5. Запишите программу сложения ADD_1 в файл add_1.asm. Получите файлы add_1.obj и add_1.hex. Проверьте работу программы с помощью отладчика AVSIM51. Результаты занесите в табл.3.
Таблица 3
Исходные данные |
Получено |
Получено |
Теоретически |
Практически |
|
Число 1 Число 2 |
DPTR Флаг C |
DPTR Флаг C |
BBAAH 2211H |
||
BBAAH DDCCH |
При использовании прямой адресации ячеек памяти подпрограмма сложения ADD_2 имеет вид:
DATA1: EQU 30H
DATA2: EQU 38H
ADD_2: MOV A,DATA1 ; Пересылка в аккумулятор МлБ 1-го числа
ADD A,DATA2 ; Сложение младших байтов
MOV DPL,A
MOV A,DATA1+1 ; Пересылка в аккумулятор СтБ 1-го числа
ADDC A,DATA2+1 ; Сложение старших байтов с учетом переноса
MOV DPH,A
RET
END
Задание 6. Запишите подпрограмму ADD_2 в файл add_2.asm. Получите файлы add_2.obj и add_2.hex. Проверьте работу программы с помощью отладчика AVSIM51. Результаты занесите в таблицу по форме табл.3.
Задание для самостоятельной работы. Разработайте подпрограммы вычитания двухбайтных двоичных чисел, расположенных в памяти данных по предыдущему примеру. Программа должна вычесть 2-е число из 1-го и поместить результат (разность) в регистр DPTR. Разработайте два варианта подпрограмм: SUB_1 – с использованием косвенной адресации ячеек памяти и SUB_2 – с использованием прямой адресации. Проверьте правильность работы программ с помощью отладчика AVSIM51. Результаты работы программ занесите в таблицы по форме табл. 3.
Команда MUL AB вычисляет произведение двух целых беззнаковых чисел, хранящихся в регистрах A и B. Младший байт произведения размещается в аккумуляторе A, а старший байт – в регистре-расширителе B. Если содержимое регистра B оказывается равным нулю, то флаг OV сбрасывается, иначе – устанавливается. Флаг переноса C всегда сбрасывается.
Задание. Запустите отладчик AVSIM51 и запишите в память команду MUL AB. Исследуйте эту команду при различных значениях параметров. Данные занесите в табл. 4.
Таблица 4
Исходные значения |
Получено |
Получено |
Теоретически |
Практически |
|
Рег. B Рег. A |
Рег. B Рег.A C OV |
Рег. B Рег. A С OV |
BBH AAH |
||
A0H C8H |
||
10H 05H |
Задание для самостоятельной работы. Разработайте подпрограмму умножения двухбайтного целого двоичного числа на однобайтное. Двухбайтное число располагается в памяти данных в ячейках 30H (МлБ) и 31H (СтБ), однобайтное число находится в регистре R2. Результат (трехбайтное число) разместите следующим образом: младший и средний байты – в регистре DPTR, а старший байт – в регистре R7:
СтБ СрБ МлБ
--------------------------------------------------------------------------! R7 ! DPH ! DPL !
--------------------------------------------------------------------------DPTR
Для разработки программы используйте алгоритм умножения «столбиком» чисел в десятичной системе, например:
58 - множимое
*
7 – множитель
56 - 1-е частичное произведение
+
35 35 - 2-е частичное произведение
406 - результат
П Подпрограмму с именем M16_8 разместите в файле m16_8.asm. Получите файлы m16_8.obj и m16_8.hex. Исследуйте работу подпрограммы при различных значениях параметров. Данные занесите в табл.5.
Таблица 5
Исходные значения |
Получено |
Получено |
Число 1 Число 2 |
Теоретически |
Практически |
FFFFH FFH |
||
F000H 0FH |
||
5555H AAH |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.