Исследование команд микроконтроллеров семейства МК51. Исследование команд сложения и вычитания. Сложение младших и старших байтов, страница 2

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.

                           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