微机原理实验报告4_第1页
微机原理实验报告4_第2页
微机原理实验报告4_第3页
微机原理实验报告4_第4页
微机原理实验报告4_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实 验 报 告课程名称:微机原理实验 第3次实验实验名称:宏命令与子程序的区别实验时间:2015年10月13日实验地点:XXXXXX组号_ 学号:XXXX 姓名:XXX指导老师:XX 评定成绩:_微机原理实验4南京大学工程管理学院一、实验设备:计算机 二、实验用时:4小时三、实验内容:1. 单步运行实例函数NO3_Mpy_8,了解单字节无符号数乘法的实现方法。2. 编写子程序Mpy_16,实现双字节无符号数乘法。自行定义变量,其中:ACCALO ;存放乘数低 8 位 ACCAHI ;存放乘数高 8 位 ACCBLO ;存放被乘数低 8 位和乘积第 1623 位 ACCBHI ;存放被乘数高 8

2、 位和乘积第 2431 位 ACCCLO ;存放乘积第 07 位 ACCCHI ;存放乘积第 815 位编写Main主程序,使用乘数 0x4015和被乘数0x3321对编写的子程序进行测试,结果应为0x0CCC71B5。3. 编写宏命令Mpy_16,实现单字节无符号数乘法。编写Main主程序调用宏命令并对运算结果进行测试。4. 使用反汇编工具Disassembly Listing单步运行程序,观察子程序与宏命令的差异。四、实验报告要求:1. 程序框图和源程序清单。2. 分析宏扩展过程,说明宏与子程序的差别。五、实验结果:1、程序框图(1)子程序Mpy_16子程序调用初始化循环计数器TEMP将乘

3、数ACCBHI、ACCBLO复制到MDHI、MDLO中ACCBHI、ACCBLO、ACCCHI、ACCCLO清零MDHI、MDLO算数右移一位,最低位进入CC=1?否ACCAHI、ACCBHI、ACCALO、ACCBLO分别相加,结果放入ACCBHI、ACCBLO中 是ACCBHI、ACCBLO带进位位右移,最低位放入C中ACCCHI、ACCCLO带进位位右移,最低位放入C中TEMP=TEMP-1TEMP=0?否子程序返回是(2)宏命令Mpy_16开始初始化循环计数器TEMP将乘数ACCBHI、ACCBLO复制到MDHI、MDLO中ACCBHI、ACCBLO、ACCCHI、ACCCLO清零MD

4、HI、MDLO算数右移一位,最低位进入CC=1?否ACCAHI、ACCBHI、ACCALO、ACCBLO分别相加,结果放入ACCBHI、ACCBLO中 是ACCBHI、ACCBLO带进位位右移,最低位放入C中ACCCHI、ACCCLO带进位位右移,最低位放入C中TEMP=TEMP-1TEMP=0?否结束是2、源程序清单(1)子程序Mpy_16listp=16f877A; list directive to define processor#include; processor specific variable definitions_CONFIG _CP_OFF & _WDT_OFF & _

5、BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFACCALO EQU 0x20 ;存放加数低8位 ACCAHI EQU 0x21 ;存放加数高8位 ACCBLO EQU 0x22 ;存放被加数低8位 ACCBHI EQU 0x23 ;存放被加数高8位 ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;临时寄存器 ; 双 字 节 加 法 子 程序,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000

6、; 复位入口地址nop ; 兼容ICD调试工具,必须加nop goto Main ; 跳转至Main函数Main MOVLW 0x15; MOVWF ACCALO; MOVLW 0x40; MOVWF ACCAHI; MOVLW 0x21; MOVWF ACCBLO; MOVLW 0x33; MOVWF ACCBHI; CALL MPY_16; NOP; GOTO $; ORG 0x0100 MPY_16 CALL SETUP ;MLOOP BCF STATUS, C ; 清进位位RRF MDHI ; MD 右移 RRF MDLO; BTFSC STATUS, C ;判断是否需要相加 CALL

7、 Add_16 ; 加乘数至 MBRRF ACCBHI ; 右移部分乘积 RRF ACCBLO;RRF ACCCHI; RRF ACCCLO;DECFSZ TEMP ; 乘法完成否?GOTO MLOOP ; 否,继续求乘积 RETURN ; 子程序返回SETUP MOVLW .16 ;初始化 TEMP 寄存器 MOVWF TEMPMOVF ACCBLO, W ; 乘数送MDMOVWF MDLO; MOVF ACCBHI,W; MOVWF MDHI; CLRF ACCBLO ; 清 MB CLRF ACCBHI; CLRF ACCCLO ;清 MC CLRF ACCCHI;RETURN ;子程序

8、返回Add_16 MOVF ACCALO, w ;ACCB和ACCA低半字节相加 ADDWF ACCBLO , f ; BTFSC STATUS, C ;有进位否? INCF ACCBHI;有,ACCB高字节加1,再加ACCAHI MOVF ACCAHI, w ; ACCA、ACCB高半字节相加 ADDWF ACCBHI, f ; RETURN ;子程序返回END;(2)宏命令Mpy_16listp=16f877A; list directive to define processor#include; processor specific variable definitions_CONFI

9、G _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFMPY_16 macro ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1; SETUP ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1 ;MLOOP BCF STATUS, C ; 清进位位RRF MDHI1 ; MD 右移 RRF MDLO1;BTFS

10、S STATUS, C ;判断是否需要相加GOTO LOOP; Add_16 ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1 ; 加乘数至 MBLOOPRRF ACCBHI1 ; 右移部分乘积 RRF ACCBLO1;RRF ACCCHI1; RRF ACCCLO1;DECFSZ TEMP1 ; 乘法完成否?GOTO MLOOP ; 否,继续求乘积 ENDM ; 子程序返回SETUP macro ACCALO2,ACCAHI2,ACCBLO2,ACCBHI2,ACCCLO2,ACCCHI2,MDHI2,MDLO

11、2,TEMP2;MOVLW .16 ;初始化 TEMP 寄存器 MOVWF TEMP2MOVF ACCBLO2, W ; 乘数送MDMOVWF MDLO2; MOVF ACCBHI2,W; MOVWF MDHI2; CLRF ACCBLO2 ; 清 MB CLRF ACCBHI2; CLRF ACCCLO2 ;清 MC CLRF ACCCHI2;ENDM ;子程序返回Add_16 macro ACCALO3,ACCAHI3,ACCBLO3,ACCBHI3,ACCCLO3,ACCCHI3,MDHI3,MDLO3,TEMP3; MOVF ACCALO3, w ;ACCB和ACCA低半字节相加 AD

12、DWF ACCBLO3 , f ; BTFSC STATUS, C ;有进位否? INCF ACCBHI3;有,ACCB高字节加1,再加ACCAHI MOVF ACCAHI3, w ; ACCA、ACCB高半字节相加 ADDWF ACCBHI3, f ; ENDM ;子程序返回ACCALO EQU 0x20 ;存放加数低8位 ACCAHI EQU 0x21 ;存放加数高8位 ACCBLO EQU 0x22 ;存放被加数低8位 ACCBHI EQU 0x23 ;存放被加数高8位 ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27

13、;TEMP EQU 0x28 ;临时寄存器 ; 双 字 节 加 法 子 程序 ,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000 ; 复位入口地址nop ; 兼容ICD调试工具,必须加nop goto Main ; 跳转至Main函数Main MOVLW 0x15; MOVWF ACCALO; MOVLW 0x40; MOVWF ACCAHI; MOVLW 0x21; MOVWF ACCBLO; MOVLW 0x33; MOVWF ACCBHI; MPY_16 ACCALO,ACCAHI,ACCBLO,ACCBHI,ACCCLO,ACCCHI,MDHI,MDLO,TEMP;

14、 NOP; GOTO $;END;3、程序运行结果截图(1)子程序Mpy_16子程序运行结果(2)宏命令Mpy_16宏指令运行结果4、分析宏扩展过程,说明宏与子程序的差别(1)子程序Mpy_16的反汇编结果子程序的反汇编代码1子程序的反汇编代码2(2)宏命令Mpy_16的反汇编结果 0000 0000 NOP 0001 2802 GOTO 0x2 0002 3015 MOVLW 0x15 0003 00A0 MOVWF 0x20 0004 3040 MOVLW 0x40 0005 00A1 MOVWF 0x21 0006 3021 MOVLW 0x21 0007 00A2 MOVWF 0x22

15、 0008 3033 MOVLW 0x33 0009 00A3 MOVWF 0x23 000A 3010 MOVLW 0x10 000B 00A8 MOVWF 0x28 000C 0822 MOVF 0x22, W 000D 00A6 MOVWF 0x26 000E 0823 MOVF 0x23, W 000F 00A7 MOVWF 0x27 0010 01A2 CLRF 0x22 0011 01A3 CLRF 0x23 0012 01A4 CLRF 0x24 0013 01A5 CLRF 0x25 0014 1003 BCF 0x3, 0 0015 0CA7 RRF 0x27, F 0016

16、 0CA6 RRF 0x26, F 0017 1C03 BTFSS 0x3, 0 0018 281F GOTO 0x1f 0019 0820 MOVF 0x20, W 001A 07A2 ADDWF 0x22, F 001B 1803 BTFSC 0x3, 0 001C 0AA3 INCF 0x23, F 001D 0821 MOVF 0x21, W 001E 07A3 ADDWF 0x23, F 001F 0CA3 RRF 0x23, F 0020 0CA2 RRF 0x22, F 0021 0CA5 RRF 0x25, F 0022 0CA4 RRF 0x24, F 0023 0BA8 D

17、ECFSZ 0x28, F 0024 2814 GOTO 0x14 0025 0000 NOP 0026 2826 GOTO 0x26 2007 2394 CALL 0x394 (3)宏扩展过程 宏扩展只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能。(4)宏与子程序的差别 宏指令(宏扩展)只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能,而子程序是调用一个程序块;宏指令通过花费空间来节省时间,子程序通过花费时间来节省空间。5、两个无符号数相乘的本质 两个无符号数相乘,其本质就是根据被乘数的位上

18、是否为1,为1则临时寄存器结果加上乘数再右移一位,为0则临时寄存器结果直接右移一位,当乘数所有位数判断结束则临时寄存器里存放的结果即为所求结果,不过要注意单字节数相乘右移一位和双字节数相乘右移一位的区别,单字节右移一位只需一次RRF指令,双字节则需要先对高位使用RRF指令,再对低位使用RRF指令。六、实验数据误差分析及反思:1、在编译汇编程序时,由于END指令放错位置,导致程序编译失败,后来发现END指令应该放在整个汇编程序的最后,而不是主程序的最后;2、两个无符号数相乘,其本质就是根据被乘数的位上是否为1,为1则临时寄存器结果加上乘数再右移一位,为0则临时寄存器结果直接右移一位,当乘数所有位

19、数判断结束则临时寄存器里存放的结果即为所求结果,不过要注意单字节数相乘右移一位和双字节数相乘右移一位的区别,单字节右移一位只需一次RRF指令,双字节则需要先对高位使用RRF指令,再对低位使用RRF指令;3、使用反汇编工具可以很好地发现子程序和宏指令之间的区别,宏指令(宏扩展)只是用原来宏定义中的若干条汇编指令代替程序中的“一条”宏指令插入到此宏指令位置处,进行直接替换功能,而子程序是调用一个程序块;4、当编译系统报错时,应该先检查一下程序语法是否存在错误,如果有则优先改正,然后再解决程序中出现的逻辑错误,这样做会使得程序完成工作快速而有效;七、实验总结:1、宏指令只是程序的直接替换,通过花费空

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论