80X86微機原理及接口技術實驗教程_第1頁
80X86微機原理及接口技術實驗教程_第2頁
80X86微機原理及接口技術實驗教程_第3頁
80X86微機原理及接口技術實驗教程_第4頁
80X86微機原理及接口技術實驗教程_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、80X86微機原理及接口技術實驗教程80X86微機原理及接口技術實驗教程PAGE 1目 錄 TOC o 1-2 h z u HYPERLINK l _Toc338345076 目 錄 PAGEREF _Toc338345076 h 1 HYPERLINK l _Toc338345077 第1章 16位微機原理及其程序設計實驗 PAGEREF _Toc338345077 h 2 HYPERLINK l _Toc338345078 1.1 系統認識實驗 PAGEREF _Toc338345078 h 2 HYPERLINK l _Toc338345079 1.2 數制轉換實驗 PAGEREF _T

2、oc338345079 h 9 HYPERLINK l _Toc338345080 1.3 運算類編程實驗 PAGEREF _Toc338345080 h 18 HYPERLINK l _Toc338345081 1.4 分支程序設計實驗 PAGEREF _Toc338345081 h 24 HYPERLINK l _Toc338345082 1.5 循環(huán)程序設計實驗 PAGEREF _Toc338345082 h 28 HYPERLINK l _Toc338345083 1.6 排序程序設計實驗 PAGEREF _Toc338345083 h 31 HYPERLINK l _Toc33834

3、5084 1.7 子程序設計實驗 PAGEREF _Toc338345084 h 35 HYPERLINK l _Toc338345085 1.8 查表程序設計實驗 PAGEREF _Toc338345085 h 40 HYPERLINK l _Toc338345086 第2章 80X86微機接口技術及其應用實驗 PAGEREF _Toc338345086 h 42 HYPERLINK l _Toc338345087 2.1 靜態(tài)存儲器擴展實驗 PAGEREF _Toc338345087 h 42 HYPERLINK l _Toc338345088 2.2 8259中斷控制實驗 PAGEREF

4、 _Toc338345088 h 46 HYPERLINK l _Toc338345089 2.3 8254定時/計數器應用實驗 PAGEREF _Toc338345089 h 56 HYPERLINK l _Toc338345090 2.4 8255并行接口實驗 PAGEREF _Toc338345090 h 63 HYPERLINK l _Toc338345091 2.5 8251串行接口應用實驗 PAGEREF _Toc338345091 h 69 HYPERLINK l _Toc338345092 2.6 實時時鐘綜合設計實驗 PAGEREF _Toc338345092 h 84 HY

5、PERLINK l _Toc338345093 2.7 鍵盤掃描及顯示設計實驗 PAGEREF _Toc338345093 h 86 HYPERLINK l _Toc338345094 2.8 電子發(fā)聲設計實驗 PAGEREF _Toc338345094 h 92 HYPERLINK l _Toc338345095 2.9 點陣LED顯示設計實驗 PAGEREF _Toc338345095 h 98 HYPERLINK l _Toc338345096 2.10 圖形LCD顯示設計實驗 PAGEREF _Toc338345096 h 107 HYPERLINK l _Toc338345097 2

6、.11 步進電機實驗 PAGEREF _Toc338345097 h 116 HYPERLINK l _Toc338345098 2.12 直流電機閉環(huán)調速實驗 PAGEREF _Toc338345098 h 120 HYPERLINK l _Toc338345099 2.13 溫度閉環(huán)控制實驗 PAGEREF _Toc338345099 h 131PAGE 115第1章 16位微機原理及其程序設計實驗本章主要介紹匯編語言程序設計,通過實驗來學習80X86的指令系統、尋址方式以及程序的設計方法,同時掌握聯機軟件的使用。1.1 系統認識實驗1.1.1 實驗目的掌握TD系列微機原理及接口技術教學實

7、驗系統的操作,熟悉Wmd86聯機集成開發(fā)調試軟件的操作環(huán)境。1.1.2 實驗設備PC機一臺,TD-PITE實驗裝置一套。1.1.3 實驗內容編寫實驗程序,將00H0FH共16個數寫入內存3000H開始的連續(xù)16個存儲單元中。1.1.4 實驗步驟1. 運行Wmd86軟件,進入Wmd86集成開發(fā)環(huán)境。2. 根據程序設計使用語言的不同,通過在“設置”下拉列表來選擇需要使用的語言和寄存器類型,這里我們設置成“匯編語言”和“16位寄存器”,如圖1.1、圖1.2所示。設置選擇后,下次再啟動軟件,語言環(huán)境保持這次的修改不變。本章選擇16位寄存器。圖1.1 語言環(huán)境設置界面圖1.2 寄存器設置界面3. 語言和

8、寄存器選擇后,點擊新建或按Ctrl+N組合鍵來新建一個文檔,如圖1.3所示。默認文件名為Wmd861。圖1.3 新建文件界面4. 編寫實驗程序,如圖1.4所示,并保存,此時系統會提示輸入新的文件名,輸完后點擊保存。圖1.4 程序編輯界面5. 點擊,編譯文件,若程序編譯無誤,則可以繼續(xù)點擊進行鏈接,鏈接無誤后方可以加載程序。編譯、鏈接后輸出如圖1.5所示的輸出信息。圖1.5 編譯輸出信息界面6. 連接PC與實驗系統的通訊電纜,打開實驗系統電源。7. 編譯、鏈接都正確并且上下位機通訊成功后,就可以下載程序,聯機調試了??梢酝ㄟ^端口列表中的“端口測試”來檢查通訊是否正常。點擊下載程序。為編譯、鏈接、

9、下載組合按鈕,通過該按鈕可以將編譯、鏈接、下載一次完成。下載成功后,在輸出區(qū)的結果窗中會顯示“加載成功!”,表示程序已正確下載。起始運行語句下會有一條綠色的背景。如圖1.6所示。圖1.6 加載成功顯示界面8. 將輸出區(qū)切換到調試窗口,使用D0000:3000命令查看內存3000H起始地址的數據,如圖1.7所示。存儲器在初始狀態(tài)時,默認數據為CC。圖1.7 內存地址單元數據顯示9. 點擊按鈕運行程序,待程序運行停止后,通過D0000:3000命令來觀察程序運行結果。如圖1.8所示。圖1.8 運行程序后數據變化顯示10. 也可以通過設置斷點,斷點顯示如圖1.9所示,然后運行程序,當遇到斷點時程序會

10、停下來,然后觀察數據。可以使用E0000:3000來改變該地址單元的數據,如圖1.10所示,輸入11后,按“空格”鍵,可以接著輸入第二個數,如22,結束輸入按“回車”鍵。 圖1.9 斷點設置顯示 圖1.10 修改內存單元數據顯示界面 實驗例程文件名為Wmd861.asm。1.1.5 操作練習編寫程序,將內存3500H單元開始的8個數據復制到3600H單元開始的數據區(qū)中。通過調試驗證程序功能,使用E命令修改3500H單元開始的數據,運行程序后使用D命令查看3600H單元開始的數據。1.2 數制轉換實驗1.2.1 實驗目的1. 掌握不同進制數及編碼相互轉換的程序設計方法,加深對數制轉換的理解。2.

11、 熟悉程序調試的方法。1.2.2 實驗設備PC機一臺,TD-PITE實驗裝置一套。1.2.3 實驗內容及步驟計算機輸入設備輸入的信息一般是由ASCII碼或BCD碼表示的數據或字符,CPU一般均用二進制數進行計算或其它信息處理,處理結果的輸出又必須依照外設的要求變?yōu)锳SCII碼、BCD碼或七段顯示碼等。因此,在應用軟件中,各類數制的轉換是必不可少的。計算機與外設間的數制轉換關系如圖1.11所示,數制對應關系如表1.1所示。圖1.11 數制轉換關系1. 將ASCII碼表示的十進制數轉換為二進制數十進制表示為: (1)Di代表十進制數0,1,2,9;上式轉換為: (2)由式(2)可歸納十進制數轉換為

12、二進制數的方法:從十進制數的最高位Dn開始作乘10加次位的操作,依次類推,則可求出二進制數的結果。表1.1 數制對應關系表十六進制BCD碼二進制機器碼ASCII碼七段碼共陽共陰00000000030H40H3FH10001000131H79H06H20010001032H24H5BH30011001133H30H4FH40100010034H19H66H50101010135H12H6DH60110011036H02H7DH70111011137H78H07H81000100038H00H7FH91001100139H18H67HA101041H08H77HB101142H03H7CHC110

13、043H46H39HD110144H21H5EHE111045H06H79HF111146H0EH71H程序流程圖如圖1.12所示。實驗參考程序如下。實驗程序清單(例程文件名:A2-1.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSDATASEGMENTSADDDB 30H,30H,32H,35H,36H ;十進制數:00256DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX, DATAMOV DS, AXMOV AX, OFFSET SADDMOV SI, AXMOV BX, 000AHM

14、OV CX, 0004HMOV AH, 00HMOV AL, SISUB AL, 30HA1:IMUL BXMOV DX, SI+01AND DX, 00FFHADC AX, DXSBB AX, 30HINC SILOOP A1A2:JMP A2CODE ENDS END START實驗步驟(1)繪制程序流程圖,編寫實驗程序,經編譯、鏈接無誤后裝入系統。(2)待轉換數據存放于數據段,根據自己要求輸入,默認為30H,30H,32H,35H,36H。(3)運行程序,然后停止程序。(4)查看AX寄存器,即為轉換結果,應為:0100 。(5)反復試幾組數據,驗證程序的正確性。2. 將十進制數的ASCI

15、I碼轉換為BCD碼從鍵盤輸入五位十進制數的ASCII碼,存放于3500H起始的內存單元中,將其轉換為BCD碼后,再按位分別存入350AH起始的內存單元內。若輸入的不是十進制的ASCII碼,則對應存放結果的單元內容為“FF”。由表1.1可知,一字節(jié)ASCII碼取其低四位即變?yōu)锽CD碼。實驗程序清單(例程文件名:A2-2.ASM)SSTACKSEGMENT STACK DW 64 DUP(?)SSTACKENDS 圖1.12 轉換程序流程圖CODESEGMENTASSUME CS:CODESTART:MOV CX, 0005H;轉換位數MOV DI, 3500H;ASCII碼首地址A1:MOV B

16、L, 0FFH;將錯誤標志存入BLMOV AL, DICMP AL, 3AH JNB A2;不低于3AH則轉A2SUB AL, 30HJB A2;低于30H則轉A2MOV BL, ALA2:MOV AL, BL;結果或錯誤標志送入ALMOV DI+0AH,AL;結果存入目標地址INC DILOOP A1MOV AX,4C00HINT 21H;程序終止CODEENDSEND START實驗步驟(1)自己繪制程序流程圖,然后編寫程序,編譯、鏈接無誤后裝入系統。(2)在3500H3504H單元中存放五位十進制數的ASCII碼,即:鍵入E3500后,輸入31,32,33,34,35。(3)運行程序,待

17、程序運行停止。(4)在調試窗口鍵入D350A,顯示運行結果,應為: 0000:350A 01 02 03 04 05 CC (5)反復測試幾組數據,驗證程序功能。3. 將十六位二進制數轉換為ASCII碼表示的十進制數十六位二進制數的值域為065535,最大可轉換為五位十進制數。五位十進制數可表示為:Di:表示十進制數09將十六位二進制數轉換為五位ASCII碼表示的十進制數,就是求D1D4,并將它們轉換為ASCII碼。自行繪制程序流程圖,編寫程序可參考例程。例程中源數存放于3500H、3501H中,轉換結果存放于3510H3514H單元中。實驗程序清單(例程文件名:A2-3.ASM)SSTACK

18、SEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV SI,3500H;源數據地址MOV DX,SIMOV SI,3515H;目標數據地址A1:DEC SIMOV AX,DXMOV DX,0000HMOV CX,000AH;除數10DIV CX;得商送AX, 得余數送DXXCHG AX,DXADD AL,30H;得Di的ASCII碼MOV SI,AL;存入目標地址CMP DX,0000HJNE A1;判斷轉換結束否,未結束則轉A1A2:CMP SI,3510H;與目標地址得首地址比較JZ A3;等于首地址則轉

19、A3,否則將剩余地址中填30HDEC SIMOV AL,30HMOV SI,ALJMP A2A3: MOV AX,4C00HINT 21H;程序終止CODEENDSEND START實驗步驟(1)編寫程序,經編譯、鏈接無誤后,裝入系統。(2)在3500H、3501H中存入0C 00。(3)運行程序,待程序運行停止。(4)檢查運行結果,鍵入D3510,結果應為:30 30 30 31 32。(5)可反復測試幾組數據,驗證程序的正確性。4. 十六進制數轉換為ASCII碼由表1.1中十六進制數與ASCII碼的對應關系可知:將十六進制數0H09H加上30H后得到相應的ASCII碼,AHFH加上37H可

20、得到相應的ASCII碼。將四位十六進制數存放于起始地址為3500H的內存單元中,把它們轉換為ASCII碼后存入起始地址為350AH的內存單元中。自行繪制流程圖。實驗程序清單(例程文件名為A2-4.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV CX,0004HMOV DI,3500H;十六進制數源地址MOV DX,DIA1:MOV AX,DXAND AX,000FH;取低4位CMP AL,0AHJB A2;小于0AH則轉A2ADD AL,07H;在AFH之間,需多加上7HA2:ADD

21、 AL,30H;轉換為相應ASCII碼MOV DI+0DH,AL;結果存入目標地址DEC DIPUSH CXMOV CL,04HSHR DX,CL;將十六進制數右移4位POP CXLOOP A1MOV AX,4C00HINT 21H;程序終止CODEENDSEND START實驗步驟(1)編寫程序,經編譯、鏈接無誤后裝入系統。(2)在3500H、3501H中存入四位十六進制數203B,即鍵入E3500,然后輸入3B 20。(3)先運行程序,待程序運行停止。(4)鍵入D350A,顯示結果為:0000:350A 32 30 33 42 CC 。(5)反復輸入幾組數據,驗證程序功能。5. BCD碼轉

22、換為二進制數將四個二位十進制數的BCD碼存放于3500H起始的內存單元中,將轉換的二進制數存入3510H起始的內存單元中,自行繪制流程圖并編寫程序。實驗程序清單(例程文件名為:A2-5.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:XOR AX, AXMOV CX, 0004HMOV SI, 3500HMOV DI, 3510HA1:MOV AL, SIADD AL, ALMOV BL, ALADD AL, ALADD AL, ALADD AL, BLINC SIADD AL, SIMOV

23、 DI, ALINC SIINC DILOOP A1MOV AX,4C00HINT 21H;程序終止CODEENDSEND START實驗步驟(1)編寫程序,經編譯、鏈接無誤后裝入系統。(2)將四個二位十進制數的BCD碼存入3500H3507H中,即:先鍵入E3500,然后輸入01 02 03 04 05 06 07 08。(3)先運行程序,待程序運行停止。(4)鍵入D3510顯示轉換結果,應為:0C 22 38 4E。(5)反復輸入幾組數據,驗證程序功能。1.2.4 思考題1. 實驗內容1中將一個五位十進制數轉換為二進制數(十六位)時,這個十進制數最小可為多少,最大可為多少?為什么?2. 將

24、一個十六位二進制數轉換為ASCII碼十進制數時,如何確定Di的值?3. 在十六進制轉換為ASCII碼時,存轉換結果后,為什么要把DX向右移四次?4. 自編ASCII碼轉換十六進制、二進制轉換BCD碼的程序,并調試運行。1.3 運算類編程實驗1.3.1 實驗目的1. 掌握使用運算類指令編程及調試方法。2. 掌握運算類指令對各狀態(tài)標志位的影響及其測試方法。3. 學習使用軟件監(jiān)視變量的方法。1.3.2 實驗設備PC機一臺,TD-PITE實驗裝置一套。1.3.3 實驗內容及步驟80X86指令系統提供了實現加、減、乘、除運算的基本指令,可對表1.2所示的數據類型進行算術運算。表1.2 數據類型算術運算表

25、數制二進制BCD碼帶符號無符號組合非組合運算符、操作數字節(jié)、字、多精度字節(jié)(二位數字)字節(jié)(一位數字)1. 二進制雙精度加法運算計算XYZ,將結果Z存入某存儲單元。實驗程序參考如下。本實驗是雙精度(2個16位,即32位)加法運算,編程時可利用累加器AX,先求低16位的和,并將運算結果存入低地址存儲單元,然后求高16位的和,將結果存入高地址存儲單元中。由于低16運算后可能向高位產生進位,因此高16位運算時使用ADC指令,這樣在低16位相加運算有進位時,高位相加會加上CF中的1。實驗程序清單(例程文件名為:A3-1.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACK

26、ENDSPUBLIC XH, XL, YH, YL, ZH, ZL;設置全局變量DATASEGMENTXLDW ?;X低位XHDW ?;X高位YLDW ?;Y低位YHDW ?;Y高位ZLDW ?;Z低位ZHDW ?;Z高位DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX, DATAMOV DS, AXMOV AX, XLADD AX, YL;X低位加Y低位MOV ZL, AX;低位和存到Z的低位MOV AX, XHADC AX, YH;高位帶進位加MOV ZH, AX;存高位結果JMP START;在此行設置斷點,以觀察變量值CODE

27、ENDSEND START實驗步驟(1)編寫程序,經編譯、鏈接無誤后裝入系統。(2)程序裝載完成后,點擊變量區(qū)標簽將觀察窗切換到變量監(jiān)視窗口。(3)點擊,將變量XH,XL,YH,YL,ZH,ZL添加到變量監(jiān)視窗中,然后修改XH,XL,YH,YL的值,如圖2.13所示,修改XH為0015,XL為65A0,YH為0021,YL為B79E。(4)在JMP START語句行設置斷點,然后運行程序。(5)當程序遇到斷點后停止運行,查看變量監(jiān)視窗口,計算結果ZH為0037,ZL為1D3E。(6)修改XH,XL,YH和YL的值,再次運行程序,觀察實驗結果,反復測試幾組數據,驗證程序的功能。思考題:求累加和程

28、序設計,在偏移地址為1000H開始依順序填入16個字(16個16位數),利用程序求和,存放在偏移地址2000H;多字節(jié)加法程序設計,參考原程序,編寫個兩個64位數的減法程序,結果保存到具體內存單元,調試并記錄。 圖1.13 變量監(jiān)視窗口 2. 十進制的BCD碼減法運算計算XYZ,其中X、Y、Z為BCD碼。實驗程序參考例程。實驗程序清單(例程文件名為A3-2.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSPUBLIC X, Y, Z;定義全局變量DATASEGMENTXDW ?YDW ?ZDW ?DATAENDSCODESEGMENTASSUME CS

29、:CODE, DS:DATASTART:MOV AX, DATAMOV DS, AXMOV AH, 00HSAHFMOV CX, 0002HMOV SI, OFFSET XMOV DI, OFFSET ZA1:MOV AL, SISBBAL, SI+02HDASPUSHFAND AL, 0FHPOPFMOV DI, ALINC DIINC SILOOP A1JMP START;設置斷點,以方便觀察變量。CODE ENDSEND START實驗步驟(1)輸入程序,編譯、鏈接無誤后裝入系統。(2)點擊將變量X,Y,Z添加到變量監(jiān)視窗中,并為X,Y賦值,假定存入40與12的BCD碼,即X為0400,

30、Y為0102。(3)在JMP START語句行設置斷點,然后運行程序。(4)程序遇到斷點后停止運行,觀察變量監(jiān)視窗,Z應為0208。(5)重新修改X與Y的值,運行程序,觀察結果,反復測試幾次,驗證程序正確性。3. 乘法運算實現十進制數的乘法運算,被乘數與乘數均以BCD碼的形式存放在內存中,乘數為1位,被乘數為5位,結果為6位。實驗程序參考例程。實驗程序清單(例程文件名為A3-3.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSDATASEGMENTDATA1 DB 5 DUP(?);被乘數DATA2 DB ?;乘數RESULT DB 6 DUP(?);

31、計算結果DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXCALL INIT;初始化目標地址單元為0MOV SI,OFFSET DATA2MOV BL,SIAND BL,0FH;得到乘數CMP BL,09HJNC ERRORMOV SI,OFFSET DATA1MOV DI,OFFSET RESULTMOV CX,0005HA1:MOV AL,SI+04HAND AL,0FHCMP AL,09HJNC ERRORDEC SIMUL BLAAM;乘法調整指令ADD AL,DI+05HAAAMOV DI+05H,A

32、LDEC DIMOV DI+05H,AHLOOP A1A2:MOV AX,4C00HINT 21H;程序終止;=將RESULT所指內存單元清零=INIT:MOV SI,OFFSET RESULTMOV CX,0003HMOV AX,0000HA3:MOV SI,AXINC SIINC SILOOP A3RET;=錯誤處理=ERROR:MOV SI,OFFSET RESULT;若輸入數據不符合要求則RESULT所指向內存單元全部寫入EMOV CX,0003HMOV AX,0EEEEHA4:MOV SI,AXINC SIINC SILOOP A4JMP A2CODE ENDSENDSTART實驗步

33、驟(1)編寫程序,編譯、鏈接無誤后裝入系統。(2)查看寄存器窗口獲得CS的值,使用U命令可得到數據段段地址DS,然后通過E命令為被乘數及乘數賦值,如被乘數:01 02 03 04 05,乘數:01,方法同實驗內容1。(3)運行程序,待程序運行停止。(4)通過D命令查看計算結果,應為:00 01 02 03 04 05;當在為被乘數和乘數賦值時,如果一個數的低4位大于9,則查看計算結果將全部顯示為E。(5)反復測試幾組數據,驗證程序的正確性。1.4 分支程序設計實驗1.4.1 實驗目的1. 掌握分支程序的結構。2. 掌握分支程序的設計、調試方法。1.4.2 實驗設備PC機一臺,TD-PITE實驗

34、裝置一套。1.4.3 實驗內容設計一數據塊間的搬移程序。設計思想:程序要求把內存中一數據區(qū)(稱為源數據塊)傳送到另一存儲區(qū)(成為目的數據塊)。源數據塊和目的數據塊在存儲中可能有三種情況,如圖1.14所示。 (a) (b) (c)圖1.14 源數據塊與目的數據塊在存儲中的位置情況對于兩個數據塊分離的情況,如圖1.14(a),數據的傳送從數據塊的首地址開始,或從數據塊的末地址開始均可。但是對于有重疊的情況,則要加以分析,否則重疊部分會因“搬移”而遭到破壞,可有如下結論:當源數據塊首地址目的塊首地址時,從數據塊末地址開始傳送數據,如圖1.14(b)所示。當源數據塊首地址目的塊首地址時,從數據塊首地址

35、開始傳送數據,如圖1.14(c)所示。實驗程序流程圖如圖1.15所示。圖1.15 程序流程圖實驗程序清單(例程文件名為:A4-1.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV CX, 0010HMOV SI, 3100HMOV DI, 3200HCMP SI, DIJA A2ADD SI, CXADD DI, CXDEC SIDEC DIA1:MOV AL, SIMOV DI, ALDEC SIDEC DIDEC CXJNE A1JMP A3A2:MOV AL, SIMOV DI,

36、 ALINC SIINC DIDEC CXJNE A2A3:MOV AX,4C00HINT 21H;程序終止CODEENDSEND START1.4.4 實驗步驟1. 按流程圖編寫實驗程序,經編譯、鏈接無誤后裝入系統。2. 用E命令在以SI為起始地址的單元中填入16個數。3. 運行程序,待程序運行停止。4. 通過D命令查看DI為起始地址的單元中的數據是否與SI單元中數據相同。5. 通過改變SI、DI的值,觀察在三種不同的數據塊情況下程序的運行情況,并驗證程序的功能。思考題:將源數據首址改為3100H,目的數據地址改為310A,再加以驗證(注意單步調試);將源數據首址改為310AH,目的數據地址

37、改為3100,再加以驗證(注意單步調試)。1.5 循環(huán)程序設計實驗1.5.1 實驗目的1. 加深對循環(huán)結構的理解。2. 掌握循環(huán)結構程序設計的方法以及調試方法。1.5.2 實驗設備PC機一臺,TD-PITE實驗裝置一套。1.5.3 實驗內容及步驟1. 計算S1233445N(N1),直到N(N1)項大于200為止。編寫實驗程序,計算上式的結果,參考流程圖如圖1.16所示。實驗程序清單(例程文件名為:A5-1.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV DX,0001HMOV BL

38、,02HA1:MOV AL,BLINC BLMUL BLADD DX,AX;結果存于DX中CMP AX,00C8H;判斷N(N+1)與200的大小JNA A1MOV AX,4C00HINT 21H;程序終止CODEENDSEND START實驗步驟(1)編寫實驗程序,編譯、鏈接無誤后裝入系統。 圖1.16 程序流程圖(2)運行程序,待程序運行停止。 (3)運算結果存儲在寄存器DX中,查看結果是否正確。(4)可以改變N(N1)的條件來驗證程序功能是否正確,但要注意,結果若大于0FFFFH將產生數據溢出。2. 求某數據區(qū)內負數的個數設數據區(qū)的第一單元存放區(qū)內單元數據的個數,從第二單元開始存放數據,

39、在區(qū)內最后一個單元存放結果。為統計數據區(qū)內負數的個數,需要逐個判斷區(qū)內的每一個數據,然后將所有數據中凡是符號位為1的數據的個數累加起來,即得到區(qū)內所包含負數的個數。實驗程序流程圖如圖1.17所示。實驗程序清單(例程文件名為:A5-2.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV DI, 3000H;數據區(qū)首地址MOV CL, DI;取數據個數XOR CH, CHMOV BL, CHINC DI;指向第一個數據A1:MOV AL, DITEST AL, 80H;檢查數據首位是否為1J

40、E A2INC BL;負數個數加1A2:INC DILOOP A1MOV DI, BL;保存結果MOV AX,4C00HINT 21H;程序終止CODEENDSEND START實驗步驟(1)按實驗流程編寫實驗程序。(2)編譯、鏈接無誤后裝入系統。(3)鍵入E3000,輸入數據如下: 300006 (數據個數) 300112 300288 300382 300490 300522 300633 圖1.17 程序流程圖(4)先運行程序,待程序運行停止。(5)查看3007內存單元或寄存器BL中的內容,結果應為03。(6)可以進行反復測試來驗證程序的正確性。1.6 排序程序設計實驗1.6.1 實驗目

41、的1. 掌握分支、循環(huán)、子程序調用等基本的程序結構。2. 學習綜合程序的設計、編制及調試。1.6.2 實驗設備PC機一臺,TD-PITE實驗裝置一套。1.6.3 實驗內容及步驟1. 氣泡排序法在數據區(qū)中存放著一組數,數據的個數就是數據緩沖區(qū)的長度,要求采用氣泡法對該數據區(qū)中的數據按遞增關系排序。設計思想:(1)從最后一個數(或第一個數)開始,依次把相鄰的兩個數進行比較,即第N個數與第N1個數比較,第N1個數與第N2個數比較等等;若第N1個數大于第N個數,則兩者交換,否則不交換,直到N個數的相鄰兩個數都比較完為止。此時,N個數中的最小數將被排在N個數的最前列。(2)對剩下的N1個數重復(1)這一

42、步,找到N1個數中的最小數。(3)再重復(2),直到N個數全部排列好為止。實驗程序清單(例程文件名為:A6-1.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV CX, 000AHMOV SI, 300AHMOV BL, 0FFHA1:CMP BL, 0FFHJNZ A4MOV BL, 00HDEC CXJZ A4PUSH SIPUSH CXA2:DEC SIMOV AL, SIDEC SICMP AL, SIJA A3XCHG AL, SIMOV SI+01H, ALMOV BL,

43、0FFHA3:INC SILOOP A2POP CXPOP SIJMP A1A4: MOV AX,4C00HINT 21H;程序終止CODEENDSEND START實驗步驟(1)分析參考程序,繪制流程圖并編寫實驗程序。(2)編譯、鏈接無誤后裝入系統。(3)鍵入E3000命令修改3000H3009H單元中的數,任意存入10個無符號數。(4)先運行程序,待程序運行停止。(5)通過鍵入D3000命令查看程序運行的結果。(6)可以反復測試幾組數據,觀察結果,驗證程序的正確性。思考題:注意兩個循環(huán)是如何循環(huán)的,如果想減少判斷次數,比如說幾次交換后就不再有數據交換了,如何修改程序來減少程序執(zhí)行時間;編一

44、程序把3000H-3009H中內容按從大到小排列;如果是有符號數怎么改寫程序。2. 學生成績名次表將分數在1100之間的10個成績存入首地址為3000H的單元中,3000HI表示學號為I的學生成績。編寫程序,將排出的名次表放在3100H開始的數據區(qū),3100HI中存放的為學號為I的學生名次。實驗程序清單(例程文件名為:A6-2.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV AX,0000HMOV DS,AXMOV ES,AXMOV SI,3000H;存放學生成績MOV CX,000

45、AH;共10個成績MOV DI,3100H;名次表首地址A1:CALL BRANCH;調用子程序MOV AL,0AHSUB AL,CLINC ALMOV BX,DXMOV BX+DI,ALLOOP A1MOV AX,4C00HINT 21H;程序終止;=掃描成績表,得到最高成績者的學號=BRANCH:PUSH CXMOV CX,000AHMOV AL,00HMOV BX,3000HMOV SI,BXA2:CMP AL,SIJAE A3MOV AL,SIMOV DX,SISUB DX,BXA3:INC SILOOP A2ADD BX,DXMOV AL,00HMOV BX,ALPOP CXRETC

46、ODEENDSEND START實驗步驟(1)繪制流程圖,并編寫實驗程序。(2)編譯、鏈接無誤后裝入系統。(3)將10個成績存入首地址為3000H的內存單元中。(4)調試并運行程序。(5)檢查3100H起始的內存單元中的名次表是否正確。1.7 子程序設計實驗1.7.1 實驗目的1. 學習子程序的定義和調用方法。2. 掌握子程序、子程序的嵌套、遞歸子程序的結構。3. 掌握子程序的程序設計及調試方法。1.7.2 實驗設備PC機一臺,TD-PITE實驗裝置一套。1.7.3 實驗內容及步驟1. 求無符號字節(jié)序列中的最大值和最小值設有一字節(jié)序列,其存儲首地址為3000H,字節(jié)數為08H。利用子程序的方法

47、編程求出該序列中的最大值和最小值。程序流程圖如圖1.18所示。圖1.18 程序流程圖實驗程序清單(例程文件名為:A7-1.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSCODESEGMENTASSUME CS:CODESTART:MOV AX, 0000HMOV DS, AXMOV SI, 3000H; 數據區(qū)首址MOV CX, 0008HCALL BRANCH; 調用子程序HERE:JMP HEREBRANCHPROC NEAR; 子程序,返回參數在AX中JCXZ A4PUSH SIPUSH CXPUSH BXMOV BH, SIMOV BL, B

48、HCLDA1:LODSBCMP AL, BHJBE A2MOV BH, ALJMP A3A2:CMP AL, BLJAE A3MOV BL, ALA3:LOOP A1MOV AX, BXPOP BXPOP CXPOP SIA4:RETBRANCHENDPCODE ENDSEND START實驗步驟(1)根據程序流程圖編寫實驗程序。(2)經編譯、鏈接無誤后裝入系統。(3)鍵入E3000命令,輸入8個字節(jié)的數據,如:D9 07 8B C5 EB 04 9D F9。(4)運行實驗程序。(5)點擊停止按鈕,停止程序運行,觀察寄存器窗口中AX的值,AX應為F9 04,其中AH中為最大值,AL中為最小值。

49、(6)反復測試幾組數據,檢驗程序的正確性。程序說明:該程序使用BH和BL暫存現行的最大值和最小值,開始時初始化成首字節(jié)的內容,然后進入循環(huán)操作,從字節(jié)序列中逐個取出一個字節(jié)的內容與BH和BL相比較,若取出的字節(jié)內容比BH的內容大或比BL的內容小,則修改之。當循環(huán)操作結束時,將BH送AH,將BL送AL,作為返回值,同時恢復BX原先的內容。2. 求N!利用子程序的嵌套和子程序的遞歸調用,實現N!的運算。根據階乘運算法則,可以得:N!N(N1)!N(N1)(N2)!0!1由此可知,欲求N的階乘,可以用一遞歸子程序來實現,每次遞歸調用時應將調用參數減1,即求(N1)的階乘,并且當調用參數為0時應停止遞

50、歸調用,且有0!1,最后將每次調用的參數相乘得到最后結果。因每次遞歸調用時參數都送入堆棧,當N為0而程序開始返回時,應按嵌套的方式逐層取出相應的調用參數。定義兩個變量N及RESULT,RESULT中存放N!的計算結果,N在00H08H之間取值。實驗程序清單(例程文件名為:A7-2.ASM)SSTACKSEGMENT STACKDW 64 DUP(?)SSTACKENDSPUBLICN, RESULT;設置全局變量DATASEGMENTNDB ?;N的范圍在18之間RESULTDW ?;N!的結果存于該變量中DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATAST

51、ART:MOV AX, DATAMOV DS, AXMOV AX, OFFSET RESULTPUSH AXMOV AL, NMOV AH, 00HPUSH AXMOV DI, 0000HCALL branchJMP START;在此處設置斷點,觀察變量;=子程序=branch:PUSH BPMOV BP,SPPUSH BXPUSH AXMOV BX,BP+DI+06HMOV AX,BP+DI+04HCMP AX,0000HJZ A1PUSH BXDEC AXPUSH AXCALL branch;遞歸調用MOV BX,BP+DI+06HMOV AX,BXPUSH BXMOV BX,BP+DI+

52、04HMUL BXPOP BXJMP A2A1:MOV AX, 0001HA2:MOV RESULT, AX;結果存入RESULT中POP AXPOP BX POP BPRET 0004HCODEENDSEND START實驗步驟(1)依據設計思想繪制程序流程圖,編寫實驗程序。(2)經編譯、鏈接無誤后裝入系統。(3)將變量N及RESULT加入變量監(jiān)視窗口,并修改N值,N在0008H之間取值。(4)在JMP START語句行設置斷點,然后運行程序。(5)當程序遇到斷點后停止運行,此時觀察變量窗口中RESULT的值是否正確,驗證程序的正確性。(6)改變變量N的值,然后再次運行程序,當程序停止在斷點

53、行后觀察實驗結果。表1.3 階乘表N012345678RESULT112618H78H02D0H13B0H9D80H1.8 查表程序設計實驗1.8.1 實驗目的學習查表程序的設計方法。1.8.2 實驗設備PC機一臺,TD-PITE實驗裝置一套。1.8.3 實驗內容所謂查表,就是根據某個值,在數據表格中尋找與之對應的一個數據,在很多情況下,通過查表比通過計算要使程序更簡單,更容易編制。通過查表的方法實現十六進制數轉換為ASCII碼。根據1.2章節(jié)的表1.1可知,09的ASCII碼為30H39H,而AF的ASCII碼為41H46H,這樣就可以將09與AF對應的ASCII碼保存在一個數據表格中。當給

54、定一個需要轉換的十六進制數時,就可以快速的在表格中找出相應的ASCII碼值。實驗程序清單(例程文件名為:A8-1.ASM)SSTACKSEGMENT STACKDW 32 DUP(?)SSTACKENDSPUBLICASCH, ASCL, HEX;定義全局變量DATASEGMENT;十六進制數09,A,B,C,D,E,F對應ASC碼表TABDB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB 41H,42H,43H,44H,45H,46HHEXDB ?;待轉換的十六進制數ASCHDB ?;高4位轉換的ASCII碼ASCLDB ?;低4位轉換的ASCII碼DA

55、TAENDSCODESEGMENTASSUME CS:CODE, SS:SSTACK, DS:DATASTART:PUSH DSXOR AX, AXMOV AX, DATAMOV DS, AXAA1:MOV AL, HEX;需轉換的十六進制數MOV AH, ALAND AL, 0F0HMOV CL, 04HSHR AL, CLMOV BX, OFFSET TAB;表首地址存放于BX中XLATMOV ASCH, AL;存放十六進制數高4位的BCD碼MOV AL, AHAND AL, 0FHXLATMOV ASCL, AL;存放十六進制數低4位的BCD碼NOPJMP AA1;在此處設置斷點,觀察轉

56、換結果CODEENDSEND START1.8.4 實驗步驟1. 根據設計思想繪制程序流程圖,編寫實驗程序。2. 經編譯、鏈接無誤后,將目標代碼裝入系統。3. 將變量HEX,ASCH,ASCL添加到變量監(jiān)視窗口中,并修改HEX的值,如12。4. 在語句JMP AA1處設置斷點,然后運行程序。5. 程序會在斷點行停止運行,并更新變量窗口中變量的值,查看變量窗,ASCH應為31,ASCL應為32。6. 反復修改HEX的值,觀察ASCH與ASCL的值,驗證程序功能。第2章 80X86微機接口技術及其應用實驗接口技術是把由處理器、存儲器等組成的基本系統與外部設備連接起來,從而實現CPU與外部設備通信的

57、一門技術。微機的應用是隨著外部設備的不斷更新和接口技術的不斷發(fā)展而深入到各行各業(yè),任何微機應用開發(fā)工作都離不開接口的設計、選用及連接。微機應用系統需要設計的硬件是一些接口電路,所要編寫的軟件是控制這些接口電路按要求工作的驅動程序。因此,接口技術是微機應用中必不可少的基本技能。2.1 靜態(tài)存儲器擴展實驗2.1.1 實驗目的1. 了解存儲器擴展的方法和存儲器的讀/寫。2. 掌握CPU對16位存儲器的訪問方法。2.1.2 實驗設備PC機一臺,TD-PITE實驗裝置一套,示波器一臺。2.1.3 實驗內容編寫實驗程序,將0000H000FH共16個數寫入SRAM的從0000H起始的一段空間中,然后通過系

58、統命令查看該存儲空間,檢測寫入數據是否正確。2.1.4 實驗原理存儲器是用來存儲信息的部件,是計算機的重要組成部分,靜態(tài)RAM是由MOS管組成的觸發(fā)器電路,每個觸發(fā)器可以存放1位信息。只要不掉電,所儲存的信息就不會丟失。因此,靜態(tài)RAM工作穩(wěn)定,不要外加刷新電路,使用方便。但一般 圖2.1 62256引腳圖SRAM 的每一個觸發(fā)器是由6個晶體管組成,SRAM芯片的集成度不會太高,目前較常用的有6116(2K8位),6264(8K8位)和62256(32K8位)。本實驗平臺上選用的是62256,兩片組成32K16位的形式,共64K字節(jié)。62256的外部引腳圖如圖4.1所示。本系統采用準32位CP

59、U,具有16位外部數據總線,即D0、D1、D15,地址總線為BHE(表示該信號低電平有效)、BLE、A1、A2、A20。存儲器分為奇體和偶體,分別由字節(jié)允許線BHE和BLE選通。存儲器中,從偶地址開始存放的字稱為規(guī)則字,從奇地址開始存放的字稱為非規(guī)則字。處理器訪問規(guī)則字只需要一個時鐘周期,BHE和BLE同時有效,從而同時選通存儲器奇體和偶體。處理器訪問非規(guī)則字卻需要兩個時鐘周期,第一個時鐘周期BHE有效,訪問奇字節(jié);第二個時鐘周期BLE有效,訪問偶字節(jié)。處理器訪問字節(jié)只需要一個時鐘周期,視其存放單元為奇或偶,而BHE或BLE有效,從而選通奇體或偶體。寫規(guī)則字和非規(guī)則字的簡單時序圖如圖2.2所示

60、。 圖2.2 寫規(guī)則字(左)和非規(guī)則字(右)簡單時序圖實驗單元電路圖圖2.3 SRAM單元電路圖實驗程序清單(MEM1.ASM)SSTACKSEGMENT STACKDW 32 DUP(?)SSTACKENDSCODESEGMENTSTARTPROC FARASSUME CS:CODE MOV AX, 8000H; 存儲器擴展空間段地址MOV DS, AXAA0:MOV SI, 0000H; 數據首地址MOV CX, 0010HMOV AX, 0000HAA1:MOV SI, AXINC AXINC SIINC SILOOP AA1MOV AX,4C00HINT 21H;程序終止STARTEN

溫馨提示

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

評論

0/150

提交評論