Для второй части лабораторной работы
LIST p=16F877, st = OFF
#include "P16F877.INC"
UDATA ; Структура данных
H_sum RES 1 ; Старший байт суммы
L_sum RES 1 ; Младший байт суммы
EXTERN mulcnd, mulplr, H_byte, L_byte
EXTERN mpy
STARTUP CODE ;сегмент STARTUP
nop
goto start
nop
nop
nop
PROG1 CODE ;сегмент PROG1
start clrw
main clrf H_sum ;очистить сумму
clrf L_sum
movlw 0x51
movwf mulplr ;51h умножить на 3Eh
movlw 0x3E
movwf mulcnd
call mpy ;вызов подпрограммы
movf H_byte,w
movwf H_sum
movf L_byte,w
movwf L_sum
movlw 0x2B
movwf mulplr ;2Bh умножить на 57h
movlw 0x57
movwf mulcnd
call mpy ;вызов подпрограммы
movf L_byte,w
bcf STATUS,C
subwf L_sum,f ;вычесть мл.байты
movf H_byte,w
subwf H_sum,f ;вычесть ст.байты
goto main
END
Листинг программы
MPASM 5.20 LR2_1.ASM 9-17-2013 12:05:19 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;Программа вычисления суммы произведений однобайтных чисел
00002 ;*************************************************
00003 LIST p=16F877, st=OFF
00004 #include "P16F877.INC"
00001 LIST
00002 ; P16F877.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
00373 LIST
00005 cblock 0x20 ; Структура данных
00000020 00006 mulcnd ; множимое
00000021 00007 mulplr ; множитель
00000022 00008 H_byte ; старший байт произведения
00000023 00009 L_byte ; младший байт произведения
00000024 00010 count ; счетчик циклов
00000025 00011 H_sum ; старший байт суммы
00000026 00012 L_sum ; младший байт суммы
00013 endc
00014
0000 00015 org 0x000 ;векторстарта
0000 280F 00016 goto start
00017 ;************* Подпрограмма умножения ************
0001 01A2 00018 mpy_SclrfH_byte
0002 01A3 00019 clrfL_byte
0003 3008 00020 movlw 8
0004 00A4 00021 movwf count
0005 0820 00022 movfmulcnd,w
0006 1003 00023 bcf STATUS,C
0007 0CA1 00024 loop rrfmulplr,F
0008 1803 00025 btfsc STATUS,C
0009 07A2 00026 addwfH_byte,F
000A 0CA2 00027 rrfH_byte,F
000B 0CA3 00028 rrfL_byte,F
000C 0BA4 00029 decfszcount,f
000D 2807 00030 goto loop
000E 3400 00031 retlw 0
00032 ;*************************************************
000F 0103 00033 start clrw
0010 01A5 00034 main clrfH_sum;очиститьсумму
0011 01A6 00035 clrfL_sum
0012 30CD 00036 movlw 0xCD
0013 00A1 00037 movwfmulplr ;CDhумножитьна 68h
0014 3044 00038 movlw 0x44
0015 00A0 00039 movwfmulcnd
0016 2001 00040 call mpy_S;вызовподпрограммы
0017 0822 00041 movfH_byte,w
0018 00A5 00042 movwfH_sum
0019 0823 00043 movfL_byte,w
001A 00A6 00044 movwfL_sum
001B 3018 00045 movlw 0x18
001C 00A1 00046 movwfmulplr ;18hумножитьна 44h
001D 3044 00047 movlw 0x44
001E 00A0 00048 movwfmulcnd
001F 2001 00049 callmpy_S ;вызов подпрограммы
0020 0823 00050 movfL_byte,w
MPASM 5.20 LR2_1.ASM 9-17-2013 12:05:19 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0021 1403 00051 bsf STATUS,C
0022 02A6 00052 subwfL_sum,f ;сложитьмл.байты
0023 1C03 00053 btfss STATUS,C
0024 03A5 00054 decfH_sum,f
0025 0822 00055 movfH_byte,w
0026 02A5 00056 subwfH_sum,f ;сложитьст.байты
0027 2810 00057 goto main
00058 END
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXX-------- ----------------
All other memory blocks unused.
Program Memory Words Used: 40
Program Memory Words Free: 8152
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 0 suppressed
