華中科技大學匯編實驗報告6_第1頁
華中科技大學匯編實驗報告6_第2頁
華中科技大學匯編實驗報告6_第3頁
華中科技大學匯編實驗報告6_第4頁
華中科技大學匯編實驗報告6_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設計實驗報告課程實驗報告課程名稱:匯編語言程序設計實驗實驗名稱: 實驗六 輸入輸出與中斷處理程序設計實驗時間:2016-4-26,14: 00-17 : 30實驗地點:南一樓804室74號實驗臺指導教師:張勇專業(yè)班級:計算機科學與技術(shù)201409班學號:U201414813姓名:唐禮威同組學生:無報告日期:2016 年5月2日原創(chuàng)性聲明本人鄭重聲明:本報告的內(nèi)容由本人獨立完成,有關觀點、方法、數(shù)據(jù)和文獻等的引用已經(jīng)在 文中指出。除文中已經(jīng)注明引用的內(nèi)容外,本報告不包含任何其他個人或集體已經(jīng)公開發(fā)表的作品 或成果,不存在剽竊、抄襲行為。特此聲明!學生簽名:日期:成績評定實驗完成質(zhì)量得

2、分(70 分)(實驗步驟清晰詳細 深入,實驗記錄真實完整 等)報告撰寫質(zhì)量得分(30 分)(報告規(guī)范、完整、通順、詳實等)總成績(100分)指導教師簽字: 日期:目錄1 實驗目的與要求12 實驗內(nèi)容13 實驗過程23.1 任務 1 2.3.1.1 設計思想及存儲單元分配 23.1.2 流程圖2.3.1.3 源程序2.3.1.4 實驗步驟3.3.1.5 實驗記錄3.3.2 任務 23.3.2.1 設計思想及存儲單元分配 .3.3.2.2 流程圖4.3.2.3 源程序4.3.2.4 實驗步驟6.3.2.5 實驗記錄6.3.3 任務 37.3.3.1 設計思想及存儲單元分配7.3.3.2 流程圖7.

3、3.3.3 源程序7.3.3.4 實驗步驟9.3.3.5 實驗記錄9.4 體會9參考文獻10111實驗目的與要求(1)掌握中斷矢量表的概念;(2)熟悉I/O訪問,BIOS功能調(diào)用方法;(3)掌握實方式下中斷處理程序的編制與調(diào)試方法。2實驗內(nèi)容任務1:用三種方式獲取中斷類型碼 10H對應的中斷處理程序的入口地址。要求:首先要進入虛擬機狀態(tài),然后(1)直接運行調(diào)試工具(TD.EXE),觀察中斷矢量表中的信息。(2)編寫程序,用DOS系統(tǒng)功能調(diào)用方式獲取,觀察功能調(diào)用相應的出口參數(shù)與“(1)”看到的結(jié)果是否相同(使用TD觀看出口參數(shù)即可)。(3) 編寫程序,直接讀取相應內(nèi)存單元,觀察讀到的數(shù)據(jù)與“

4、(1)看到的結(jié)果 是否相同(使用TD觀看程序的執(zhí)行結(jié)果即可)。任務2:編寫一個接管鍵盤中斷的中斷服務程序并駐留內(nèi)存,要求在程序返回DOS操作系統(tǒng)后,鍵盤的按鍵 A變成了按鍵B,而B變成了 A。要求:(1)在DOS虛擬機或DOS窗口下執(zhí)行程序,中斷服務程序駐留內(nèi)存。(2)在DOS命令行下按鍵A,屏幕顯示為B,按B時屏幕顯示為A。執(zhí)行TD, 在代碼區(qū)輸入指令“ MOV AX,0 ”看是否能發(fā)生變化。(3)選作:另外編寫一個中斷服務程序的卸載程序,將鍵盤中斷服務程序恢 復到原來的狀態(tài)(也就是還原中斷矢量表的信息)。任務3:讀取CMOS內(nèi)指定單元的信息,按照16進制形式顯示在屏幕上。要求:(1) 先輸

5、入待讀取的CMOS內(nèi)部單元的地址編號(可以只處理編號小于 10的 地址單元)。再使用IN/OUT指令,讀取CMOS內(nèi)的指定單元的信息。(2)將讀取的信息用16進制的形式顯示在屏幕上。若是時間信息,可以人工判 斷一下是否正確3實驗過程3.1任務13.1.1設計思想及存儲單元分配用三種方式獲取中斷類型碼10H對應的中斷處理程序的入口地址。1. 直接在td中觀察即可。2. 系統(tǒng)功能調(diào)用35H,入口參數(shù)為AL=10H,取中斷信息。3. 直接把主存中的 DS:40H tIP,DS:42H宀CS賦值給寄存器BX和C%3.1.2流程圖無3.1.3源程序1. 程序名renwu61.386CODE SEGMEN

6、T USE16ASSUME CS:CODESTART: XOR AX,AXMOV DS,AXMOV AX,3510HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2. 程序名renwu62.386STACK SEGMENT USE16 STACKDB 200 DUP(O)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE, SS:STACKSTART: XOR AX,AXMOV DS,AXXOR BX,BXXOR CX,CXMOV BX,DS:40HMOV CX,DS:42HMOV AH,4CHINT 21HCODE EN

7、DSEND START3.1.4實驗步驟1. 直接運行td ,置數(shù)據(jù)區(qū)為當前區(qū)執(zhí)行 Goto ,在地址輸入窗口 輸:40H( 0:10*4)->IP,(0:10*4+2->CS 讀取連續(xù)的4個字節(jié),前兩個為偏移地址,后兩個為段值。 然后置代碼區(qū)為當前區(qū)。輸入剛才得到的值,得到對應的程序。2. 將程序renwu61編譯、鏈接,調(diào)試直到?jīng)]有錯誤。運行td renwu61,在td中單步調(diào)試,觀察 es與bx的改變情況;3. 將程序renwu62編譯、鏈接,調(diào)試直到?jīng)]有錯誤。運行td renwu62,在td中單步調(diào)試,觀察 寄存器的值。3.1.5實驗記錄(包括實驗條件、輸入/輸出、錯誤和修

8、改等信息的記錄)1實驗環(huán)境條件:16M 內(nèi)存; WINDOWS XP 命令行窗口;EDIT.EXE 2.0 ; MASM.EXE 6.0;LINK.EXE 5.2; TD.EXE 5.0。2. 方法一,直接觀察 ds段,可以觀察到從 0:40h開始低2個字節(jié)為0F96,高2個字節(jié)為3002;3. 方法二,調(diào)用35號系統(tǒng)功能,在 TD內(nèi)觀察到es為3002,bx為0F96 ;u4. 方法三,將0:40h開始的低2個字節(jié)移至bx,高2個字節(jié)移至ex,得到ex為3002, bx為0F96;5. 比較上述三種方法得到的結(jié)果,發(fā)現(xiàn)它們一致,說明以上方法實施得到的結(jié)果準確無誤3.2任務23.2.1設計思想

9、及存儲單元分配設計思想:修改鍵盤驅(qū)動中斷程序(int 16h),將中斷矢量表0:58h開始的4個字節(jié)修改為新的中斷程序 的偏移地址和段首址,并保存號舊的鍵盤驅(qū)動中斷程序的偏移地址和段首址。若不是,則在新的中斷程序中, 先判斷用戶調(diào)用的是否為鍵盤驅(qū)動中斷程序的讀入鍵盤功能, 直接調(diào)用舊的鍵盤驅(qū)動中斷程序 ;若是,則對輸入進行處理。實際上我們改變出口參數(shù)中AL的值即是鍵入字符的 ASCII碼即可實現(xiàn)。322流程圖開始調(diào)用 OLDINTYINT 36H的功能 號為00H或10H-、NX輸入為A返回AL改為B輸入為BTN*正常返回ALT返回AL改為A結(jié)束3.2.3源程序程序名renwu63.386DA

10、TA SEGMENT USE16DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,SS:STACKOLD_INT DW ?,?NEW16H:CMP AH,00HJE ATBCMP AH,10HJE ATBJMP DWORD PTR OLDNTATB:PUSHFCALL DWORD PTR OLD_INTCMP AL,41H;比較輸入的ascii碼JNZ NEXT1;MOV AL,42HJMP QUITNEXT1: CMP AL,42HJNZ NEXT2MOV AL,41HJMP QUITNEXT2: CMP AL,61HJNZ NEXT3MOV AL,62HJ

11、MP QUITNEXT3: CMP AL,62HJNZ QUITMOV AL,61HQUIT: IRETSTART: XOR AX,AXMOV DS,AXMOV AX,DS:16H*4保存偏移部分保存段值MOV OLD_INT,AXMOV AX,DS:16H*4+2MOV OLD_INT+2,AXCLIMOV WORD PTR DS:16H*4,OFFSET NEW16HMOV DS:16H*4+2,CSSTIMOV DX,OFFSET START+15SHR DX,4ADD DX,10HMOV AL,0MOV AH,31HINT 21HCODE ENDSSTACK SEGMENT USE16

12、 STACKDB 200 DUP(O)STACK ENDSEND START3.2.4實驗步驟1. 使用編輯程序 EDIT.EXE錄入源程序renwu63,編譯,鏈接。2. 觀察提示信息,若出錯,則用編輯程序修改錯誤,修改后再重新編譯。3. 執(zhí)行該程序輸入 a/A,觀察是否輸出b/B;輸入b/B,觀察是否輸出a/A。3.2.5實驗記錄1. 實驗環(huán)境條件:16M 內(nèi)存; WINDOWS XP 命令行窗口;EDIT.EXE 2.0 ; MASM.EXE 6.0;LINK.EXE 5.2; TD.EXE 5.0。2. 在鍵盤鍵入a/A,發(fā)現(xiàn)屏幕回顯 b/B;在鍵盤鍵入b/B,發(fā)現(xiàn)屏幕回顯 a/A,證

13、明程序編寫得準確無誤。當輸入ababAB,輸出:a Cou.iajnd PromptJi!%>noi3-n rGnuuGJaanHicposofCHfiSM Con>pAtibillitv DriverCojiirright CO Hicrosoft Corp 1. fill rights reserutsdInokiny = HL.EKE z1! zZa xc rornHuS?, Avnc CR>陽閒nblLot*len .00Cnpyright CO MirosiiFr Cnrji. ftll rihtw rrsrrwcd-A vttf imblliiy =. dcviE

14、:>link KBNVUbJ QBJnirosort C.R> Se<Tmente;dl Execut'ablc Linker Uetsidiii034 Mlay 24 1?¥1Co plight CO Mlcrosiof t Corp 1?®4-19,91 Allerved.Hun Flla HENNUb3.oxsJ=Llvt Flit- tifeLul.iidjjJ-Lihmrinn I .lihliDef in it:iDn Filo Emul.<deE "E«S>r&nwu&J3. 通過編寫代

15、碼發(fā)現(xiàn),將舊的中斷程序的偏移地址與首地址保存下來后,可有有兩種方式調(diào)用舊的中斷程序:Jmp dword ptr old_i nt;Call dword ptr old_i nt;前一種方式,可直接結(jié)束新的(不返回至)中斷程序;后一種方式,可返回至新的中斷程序。3.3任務33.3.1設計思想及存儲單元分配in指1號系統(tǒng)功能調(diào)用讀入字符,將用戶輸入轉(zhuǎn)化為數(shù)字,作為信息的偏移地址。然后調(diào)用 令,從指定端口取出數(shù)據(jù)即可。3.3.2流程圖開始一號功能調(diào)用輸入字符轉(zhuǎn)化成數(shù)字INAX,D存入 AX輸出AX數(shù)據(jù)結(jié)束3.3.3源程序程序名renwu64.386use16data segme ntbuf db 2

16、data endsstack segme nt use16 stack db 200 dup(O)stack endscode segme nt use16assume ds:data,ss:stack,cs:codesta比mov ax, datamov ds, axlopa: mov ah, 1;讀入輸入int 21hsub al, 30h;轉(zhuǎn)化成十進制 09out 70h, al;取出信息in al, 71hmov ah, aland al, 0fhshr ah,4add ax, 3030h;轉(zhuǎn)化為 ascll 碼xchg ah, almov bx, axlea si, bufmov w

17、ord ptr si+1, bxmov dl, 0ah;輸出換行mov ah, 2int 21hmov dl, 0dhmov ah, 2int 21hmov dl, bl;輸出信息mov ah, 2int 21hmov dl, bhmov ah, 2int 21hmov dl, 0ah;輸出換行mov ah, 2int 21hmov dl, 0dhmov ah, 2int 21hjmp lopa;循環(huán)mov ah, 4chint 21hcode endsend start3.3.4實驗步驟1. 錄入源程序renwu64,編譯,鏈接。2. 觀察提示信息,若出錯,則用編輯程序修改錯誤,修改后再重新編譯。3. 執(zhí)行該程序, 0' 9',然后觀察屏幕輸出信息,驗證是否正確。3.3.5實驗記錄1. 實驗環(huán)境條件:16M 內(nèi)存; WINDOWS XP 命令行窗口; EDIT.EXE 2.0 ; MASM.EXE 6.0;LINK.EXE 5.2; TD.EXE 5.0。2. 取出的信息按照 BCD編碼進行壓縮,分為兩部分,分別存儲在AL,AH。比如說當前小時信息是19,則1存儲在 AH,為0x01,9存儲在 AL,為0x09。3. 執(zhí)行程序發(fā)現(xiàn)有時輸出0x0,屏幕上一次輸出當前的時間信息,包括年、月、日、星期、

溫馨提示

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

評論

0/150

提交評論