微機(jī)原理實(shí)驗(yàn)報告4_第1頁
微機(jī)原理實(shí)驗(yàn)報告4_第2頁
微機(jī)原理實(shí)驗(yàn)報告4_第3頁
微機(jī)原理實(shí)驗(yàn)報告4_第4頁
微機(jī)原理實(shí)驗(yàn)報告4_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí) 驗(yàn) 報 告課程名稱:微機(jī)原理實(shí)驗(yàn) 第3次實(shí)驗(yàn)實(shí)驗(yàn)名稱:宏命令與子程序的區(qū)別實(shí)驗(yàn)時間:2015年10月13日實(shí)驗(yàn)地點(diǎn):XXXXXX組號_ 學(xué)號:XXXX 姓名:XXX指導(dǎo)老師:XX 評定成績:_微機(jī)原理實(shí)驗(yàn)4南京大學(xué)工程管理學(xué)院一、實(shí)驗(yàn)設(shè)備:計算機(jī) 二、實(shí)驗(yàn)用時:4小時三、實(shí)驗(yàn)內(nèi)容:1. 單步運(yùn)行實(shí)例函數(shù)NO3_Mpy_8,了解單字節(jié)無符號數(shù)乘法的實(shí)現(xiàn)方法。2. 編寫子程序Mpy_16,實(shí)現(xiàn)雙字節(jié)無符號數(shù)乘法。自行定義變量,其中:ACCALO ;存放乘數(shù)低 8 位 ACCAHI ;存放乘數(shù)高 8 位 ACCBLO ;存放被乘數(shù)低 8 位和乘積第 1623 位 ACCBHI ;存放被乘數(shù)高 8

2、 位和乘積第 2431 位 ACCCLO ;存放乘積第 07 位 ACCCHI ;存放乘積第 815 位編寫Main主程序,使用乘數(shù) 0x4015和被乘數(shù)0x3321對編寫的子程序進(jìn)行測試,結(jié)果應(yīng)為0x0CCC71B5。3. 編寫宏命令Mpy_16,實(shí)現(xiàn)單字節(jié)無符號數(shù)乘法。編寫Main主程序調(diào)用宏命令并對運(yùn)算結(jié)果進(jìn)行測試。4. 使用反匯編工具Disassembly Listing單步運(yùn)行程序,觀察子程序與宏命令的差異。四、實(shí)驗(yàn)報告要求:1. 程序框圖和源程序清單。2. 分析宏擴(kuò)展過程,說明宏與子程序的差別。五、實(shí)驗(yàn)結(jié)果:1、程序框圖(1)子程序Mpy_16子程序調(diào)用初始化循環(huán)計數(shù)器TEMP將乘

3、數(shù)ACCBHI、ACCBLO復(fù)制到MDHI、MDLO中ACCBHI、ACCBLO、ACCCHI、ACCCLO清零MDHI、MDLO算數(shù)右移一位,最低位進(jìn)入CC=1?否ACCAHI、ACCBHI、ACCALO、ACCBLO分別相加,結(jié)果放入ACCBHI、ACCBLO中 是ACCBHI、ACCBLO帶進(jìn)位位右移,最低位放入C中ACCCHI、ACCCLO帶進(jìn)位位右移,最低位放入C中TEMP=TEMP-1TEMP=0?否子程序返回是(2)宏命令Mpy_16開始初始化循環(huán)計數(shù)器TEMP將乘數(shù)ACCBHI、ACCBLO復(fù)制到MDHI、MDLO中ACCBHI、ACCBLO、ACCCHI、ACCCLO清零MD

4、HI、MDLO算數(shù)右移一位,最低位進(jìn)入CC=1?否ACCAHI、ACCBHI、ACCALO、ACCBLO分別相加,結(jié)果放入ACCBHI、ACCBLO中 是ACCBHI、ACCBLO帶進(jìn)位位右移,最低位放入C中ACCCHI、ACCCLO帶進(jìn)位位右移,最低位放入C中TEMP=TEMP-1TEMP=0?否結(jié)束是2、源程序清單(1)子程序Mpy_16listp=16f877A; list directive to define processor#include<p16f877A.inc> processor specific variable definitions_CONFIG _CP

5、_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFFACCALO EQU 0x20 ;存放加數(shù)低8位 ACCAHI EQU 0x21 ;存放加數(shù)高8位 ACCBLO EQU 0x22 ;存放被加數(shù)低8位 ACCBHI EQU 0x23 ;存放被加數(shù)高8位 ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;臨時寄存器 ; 雙 字

6、 節(jié) 加 法 子 程序,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000 ; 復(fù)位入口地址nop ; 兼容ICD調(diào)試工具,必須加nop goto Main ; 跳轉(zhuǎn)至Main函數(shù)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 ; 清進(jìn)位位RRF MDHI ;

7、 MD 右移 RRF MDLO; BTFSC STATUS, C ;判斷是否需要相加 CALL Add_16 ; 加乘數(shù)至 MBRRF ACCBHI ; 右移部分乘積 RRF ACCBLO;RRF ACCCHI; RRF ACCCLO;DECFSZ TEMP ; 乘法完成否?GOTO MLOOP ; 否,繼續(xù)求乘積 RETURN ; 子程序返回SETUP MOVLW .16 ;初始化 TEMP 寄存器 MOVWF TEMPMOVF ACCBLO, W ; 乘數(shù)送MDMOVWF MDLO; MOVF ACCBHI,W; MOVWF MDHI; CLRF ACCBLO ; 清 MB CLRF AC

8、CBHI; CLRF ACCCLO ;清 MC CLRF ACCCHI;RETURN ;子程序返回Add_16 MOVF ACCALO, w ;ACCB和ACCA低半字節(jié)相加 ADDWF ACCBLO , f ; BTFSC STATUS, C ;有進(jìn)位否? INCF ACCBHI;有,ACCB高字節(jié)加1,再加ACCAHI MOVF ACCAHI, w ; ACCA、ACCB高半字節(jié)相加 ADDWF ACCBHI, f ; RETURN ;子程序返回END;(2)宏命令Mpy_16listp=16f877A; list directive to define processor#include

9、<p16f877A.inc> processor specific variable definitions_CONFIG _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

10、,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1 ;MLOOP BCF STATUS, C ; 清進(jìn)位位RRF MDHI1 ; MD 右移 RRF MDLO1;BTFSS STATUS, C ;判斷是否需要相加GOTO LOOP; Add_16 ACCALO1,ACCAHI1,ACCBLO1,ACCBHI1,ACCCLO1,ACCCHI1,MDHI1,MDLO1,TEMP1 ; 加乘數(shù)至 MBLOOPRRF ACCBHI1 ; 右移部分乘積 RRF ACCBLO1;RRF ACCCHI1; RRF ACCCLO1;DECFSZ TEMP1 ; 乘法完成否?GOTO MLOO

11、P ; 否,繼續(xù)求乘積 ENDM ; 子程序返回SETUP macro ACCALO2,ACCAHI2,ACCBLO2,ACCBHI2,ACCCLO2,ACCCHI2,MDHI2,MDLO2,TEMP2;MOVLW .16 ;初始化 TEMP 寄存器 MOVWF TEMP2MOVF ACCBLO2, W ; 乘數(shù)送MDMOVWF MDLO2; MOVF ACCBHI2,W; MOVWF MDHI2; CLRF ACCBLO2 ; 清 MB CLRF ACCBHI2; CLRF ACCCLO2 ;清 MC CLRF ACCCHI2;ENDM ;子程序返回Add_16 macro ACCALO3,

12、ACCAHI3,ACCBLO3,ACCBHI3,ACCCLO3,ACCCHI3,MDHI3,MDLO3,TEMP3; MOVF ACCALO3, w ;ACCB和ACCA低半字節(jié)相加 ADDWF ACCBLO3 , f ; BTFSC STATUS, C ;有進(jìn)位否? INCF ACCBHI3;有,ACCB高字節(jié)加1,再加ACCAHI MOVF ACCAHI3, w ; ACCA、ACCB高半字節(jié)相加 ADDWF ACCBHI3, f ; ENDM ;子程序返回ACCALO EQU 0x20 ;存放加數(shù)低8位 ACCAHI EQU 0x21 ;存放加數(shù)高8位 ACCBLO EQU 0x22 ;

13、存放被加數(shù)低8位 ACCBHI EQU 0x23 ;存放被加數(shù)高8位 ACCCLO EQU 0x24;ACCCHI EQU 0x25;MDLO EQU 0x26;MDHI EQU 0x27;TEMP EQU 0x28 ;臨時寄存器 ; 雙 字 節(jié) 加 法 子 程序 ,入口地址ACCB + ACCA,出口地址ACC ORG 0x0000 ; 復(fù)位入口地址nop ; 兼容ICD調(diào)試工具,必須加nop goto Main ; 跳轉(zhuǎn)至Main函數(shù)Main MOVLW 0x15; MOVWF ACCALO; MOVLW 0x40; MOVWF ACCAHI; MOVLW 0x21; MOVWF ACCB

14、LO; MOVLW 0x33; MOVWF ACCBHI; MPY_16 ACCALO,ACCAHI,ACCBLO,ACCBHI,ACCCLO,ACCCHI,MDHI,MDLO,TEMP; NOP; GOTO $;END;3、程序運(yùn)行結(jié)果截圖(1)子程序Mpy_16子程序運(yùn)行結(jié)果(2)宏命令Mpy_16宏指令運(yùn)行結(jié)果4、分析宏擴(kuò)展過程,說明宏與子程序的差別(1)子程序Mpy_16的反匯編結(jié)果子程序的反匯編代碼1子程序的反匯編代碼2(2)宏命令Mpy_16的反匯編結(jié)果 0000 0000 NOP 0001 2802 GOTO 0x2 0002 3015 MOVLW 0x15 0003 00A0

15、MOVWF 0x20 0004 3040 MOVLW 0x40 0005 00A1 MOVWF 0x21 0006 3021 MOVLW 0x21 0007 00A2 MOVWF 0x22 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 CLR

16、F 0x23 0012 01A4 CLRF 0x24 0013 01A5 CLRF 0x25 0014 1003 BCF 0x3, 0 0015 0CA7 RRF 0x27, F 0016 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

17、0CA3 RRF 0x23, F 0020 0CA2 RRF 0x22, F 0021 0CA5 RRF 0x25, F 0022 0CA4 RRF 0x24, F 0023 0BA8 DECFSZ 0x28, F 0024 2814 GOTO 0x14 0025 0000 NOP 0026 2826 GOTO 0x26 2007 2394 CALL 0x394 (3)宏擴(kuò)展過程 宏擴(kuò)展只是用原來宏定義中的若干條匯編指令代替程序中的“一條”宏指令插入到此宏指令位置處,進(jìn)行直接替換功能。(4)宏與子程序的差別 宏指令(宏擴(kuò)展)只是用原來宏定義中的若干條匯編指令代替程序中的“一條”宏指令插入到此宏

18、指令位置處,進(jìn)行直接替換功能,而子程序是調(diào)用一個程序塊;宏指令通過花費(fèi)空間來節(jié)省時間,子程序通過花費(fèi)時間來節(jié)省空間。5、兩個無符號數(shù)相乘的本質(zhì) 兩個無符號數(shù)相乘,其本質(zhì)就是根據(jù)被乘數(shù)的位上是否為1,為1則臨時寄存器結(jié)果加上乘數(shù)再右移一位,為0則臨時寄存器結(jié)果直接右移一位,當(dāng)乘數(shù)所有位數(shù)判斷結(jié)束則臨時寄存器里存放的結(jié)果即為所求結(jié)果,不過要注意單字節(jié)數(shù)相乘右移一位和雙字節(jié)數(shù)相乘右移一位的區(qū)別,單字節(jié)右移一位只需一次RRF指令,雙字節(jié)則需要先對高位使用RRF指令,再對低位使用RRF指令。六、實(shí)驗(yàn)數(shù)據(jù)誤差分析及反思:1、在編譯匯編程序時,由于END指令放錯位置,導(dǎo)致程序編譯失敗,后來發(fā)現(xiàn)END指令應(yīng)該放在整個匯編程序的最后,而不是主程序的最后;2、兩個無符號數(shù)相乘,其本質(zhì)就是根據(jù)被乘數(shù)的位上是否為1,為1則臨時寄存器結(jié)果加上乘數(shù)再右移一位,為0則臨時寄存器結(jié)果直接右

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論