![匯編程序 讀入一個文本文件并以DEBUG中的D命令格式顯示.doc_第1頁](http://file.renrendoc.com/FileRoot1/2020-1/10/afe3a2c3-87e5-4258-8586-774b518755cf/afe3a2c3-87e5-4258-8586-774b518755cf1.gif)
![匯編程序 讀入一個文本文件并以DEBUG中的D命令格式顯示.doc_第2頁](http://file.renrendoc.com/FileRoot1/2020-1/10/afe3a2c3-87e5-4258-8586-774b518755cf/afe3a2c3-87e5-4258-8586-774b518755cf2.gif)
![匯編程序 讀入一個文本文件并以DEBUG中的D命令格式顯示.doc_第3頁](http://file.renrendoc.com/FileRoot1/2020-1/10/afe3a2c3-87e5-4258-8586-774b518755cf/afe3a2c3-87e5-4258-8586-774b518755cf3.gif)
![匯編程序 讀入一個文本文件并以DEBUG中的D命令格式顯示.doc_第4頁](http://file.renrendoc.com/FileRoot1/2020-1/10/afe3a2c3-87e5-4258-8586-774b518755cf/afe3a2c3-87e5-4258-8586-774b518755cf4.gif)
![匯編程序 讀入一個文本文件并以DEBUG中的D命令格式顯示.doc_第5頁](http://file.renrendoc.com/FileRoot1/2020-1/10/afe3a2c3-87e5-4258-8586-774b518755cf/afe3a2c3-87e5-4258-8586-774b518755cf5.gif)
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目 錄1. 題目12. 程序總體設計方案、思路13. 程序設計框圖34. 源程序清單115. 程序調試結果及分析186. 設計總結216.1問題216.2心得21湖南工程學院課程設計報告1. 題目讀入一個文本文件并以DEBUG中的D命令格式顯示2. 程序總體設計方案、思路本程序是讀入一個文本文件并以DEBUG中的D命令格式顯示。 操作環(huán)境是32位的windows XP系統(tǒng),使用CmasmW軟件(本人使用Masm軟件,操作環(huán)境是64位WINDOWS 7)進行匯編。本程序要求以DEBUG中的D命令格式顯示一個文本文件,文件名從鍵盤鍵入,大體思路為打開相應文件,讀文件至程序緩沖區(qū),并按照要求顯示,以下是我本次課程設計的詳細方案、思路:本程序要求用D命令格式顯示內容,使用DEBUG中的D命令格式顯示一個文本文件時,顯示寄存器中的內容大致為:段地址、偏移地址、ASCII碼部分(每個字節(jié)的值都用ASCII碼表示)和字符顯示部分(將ASCII碼轉化為字符顯示),每個非打印字符(無效的字符)在顯示時用“.”表示,每行顯示16個字節(jié)的內容,第8個字節(jié)和第9個字節(jié)之間有一個連接字符“-”。每個顯示行從16字節(jié)的邊界上開始。程序主要由兩大塊組成,第一塊是文件的獲取,包括鍵入、打開、讀取和關閉,其中主要涉及基本DOS系統(tǒng)功能調用指令的使用。第二塊是文件的顯示,包括段地址、偏移地址、以及讀取的文件內容(ASCII碼及對應的符號),其中就涉及到多次轉移和循環(huán),需要多個子程序的支持才能實現(注意子程序要進行存儲保護和恢復)。程序開始之前,首先在DATA SEGMENT數據段中定義BUF1用來存儲讀取的文件,用BUF來存儲文件名的最大字符緩沖以及實際輸入的字符個數,通過相連的FILE來保存實際輸入的文件名,HANDLE的作用是在成功打開文件后保存文件代號,ERROR_MESSAGE和MESSAGE分別是提示語句,用來提示錯誤和鍵入值。第一大塊(文件的獲?。┑膬热葜饕揽炕镜逆I盤鍵入以及文件存儲實現:1. 首先要鍵盤輸入需要顯示內容的文件名,通過0A號功能鍵入一個文件名到緩沖區(qū),用BUF來存放緩沖區(qū)最大字符數和實際輸入的文件名的長度,其中并不存放文件名,真正的文件名用FILE來存放,輸入完以后在FILE末給“0”(MOV指令)以結束并確認輸入,文件名鍵入完成;2. 鍵入完成后,打開文件,通過3D號功能打開文件,需要先將AL置0以選擇讀功能(AL=1為寫,2為讀/寫),將FILE文件名首地址給DX以讀取文件名,如果打開失敗則顯示錯誤,AX=錯誤碼,如果成功則AX=文件代號,文件代號需要通過第三方保存,因為在后續(xù)操作需要使用,進入下一步;3. 通過3F號功能讀取文件,調用參數BX=文件代號,CX=讀取字節(jié)數,用BUF1讀取文件的內容,如果讀取文件失敗,則顯示錯誤,AX=錯誤碼,如果成功讀取文件,則文件保存在BUF1中,AX=實際讀入的字節(jié)數;4. 將HANDLE中所存的文件代號給BX,通過3E號功能完成文件關閉功能,如果程序到此都沒有發(fā)生錯誤,則運行成功,進入下一個階段,如失敗,則提示錯誤,AX=錯誤碼。第二大塊功能主要是通過循環(huán)、轉移、比較等來實現最終顯示:1. 由于D命令格式顯示有其特殊的要求(上文已經提及),所以在設計時也應該考慮在內,本程序設置256個字符,每行顯示16個字節(jié),共16行,這里可以用到loop循環(huán)16次,每一次顯示一行內容;2. 顯示段地址,調用子程序顯示段地址,將DATA段的地址給BX,通過4次循環(huán)(一次左移4位)依次讀出4個4位二進制數,用4位16進制表示,具體規(guī)則是,將每次循環(huán)到低位的數和0FH相與,只留下最低4位,讓其與30H相加,如果小于3AH,說明是0-9之間的數,由16進制的規(guī)則可知他們都可以直接顯示,如果大于等于3A,則要將其加7(如A 對應10,加30H后為3A,加7后為41H,為A對應的ASCII碼),經過循環(huán)后,可以將段地址顯示,段地址和偏移地址間要加“:”號;3. 顯示偏移地址,用DI作為偏移量,初始化為0,將BUFDI的地址給BX,以顯示段地址的方式將偏移地址顯示出,然后顯示一個空格;4. 前8個對應字符ASCII碼的顯示,因為D命令格式要求8個字符中間要加一個“-”號,所以在程序編寫時要分兩次進行,中間加上“-”號。通過8次循環(huán)來依次顯示前8個字節(jié),通過BUF1DI依次讀取BUF1中的內容,DI初始為0;5. 后8個對應字符ASCII碼的顯示原理與第4步相同,在此不進行過多闡述;6. 顯示ASCII碼對應的字符,由于之前DI已經增到16,但我們需要重新開始讀取BUF1,以此來顯示改行最開始的字符,所以要先將DI減16,回到每一行的最初位置,再通過16次循環(huán)將每行16個字節(jié)顯示出來,這里要注意D命令格式的要求,每個非打印字符在顯示的ASCII部分由“.”表示;7. 每一行顯示完畢以后,由于會執(zhí)行POP DI的操作,所以DI=16的值會被清楚,在進行顯示下一行時,先要人為將DI加16,使當前地址指向BUF1的第16個位置,而不是重新開始,經過16次循環(huán)后,256個字節(jié)將全部顯示出來。3. 程序設計框圖(1) 第一塊設計框圖:關于文件獲取,包括鍵入、打開、讀取以及關閉。開始0A號功能鍵入文件名3D號功能打開文件打開成功?(CF=0?)發(fā)生錯誤 N YHANDLE=文件代號BX=文件代號CX=字節(jié)數3F號功能讀取文件讀取成功?(CF=0?) N發(fā)生錯誤 YBX=文件代號3E號功能關閉文件結束圖3.1 文件獲取表3-1文件獲取中使用的DOS系統(tǒng)功能調用表功能調用參數返回參數0A 鍵盤輸入到緩沖區(qū)DS:DX=緩沖區(qū)首址(DS:DX)=緩沖區(qū)最大字符數(DS:DX+1)=實際輸入的字符數3D打開文件DS:DX=ASCIZ串地址AL=訪問和文件共享方式0=讀 1=寫 2=讀/寫成功:AX=文件代號失敗:AX=錯誤碼3E 關閉文件BX=文件代號失?。篈X=錯誤碼3F 讀文件或設備DS:DX=數據緩沖區(qū)地址BX=文件代號CX=讀取的字節(jié)數成功:AX=實際寫入的字節(jié)數 AX=0已到文件失敗:AX=錯誤碼該表中詳細列舉了文件獲取中需要使用的一些DOS系統(tǒng)調用功能,調用參數可以看作功能使用所需要的前提條件,返回參數是運行后的一個返回值,在程序設計中要注意每一個功能使用之前必須將調用參數配置好,否則會出現錯誤。表3-2文件獲取中的主要子函數及功能表子函數功能IN_FINAME用于文件名的鍵入OPENF用于文件內容的獲取文件名的鍵入要注意哪個寄存器存字符數,哪個寄存器存儲真正的文件名,以及鍵入完成后需要進行的操作,文件的獲取要注意表3-1中的條件。(2) 第二塊設計框圖:關于段地址、偏移地址、16個ASCII碼、16個字節(jié)的顯示()總體設計:開始設置循環(huán)次數(行數)CX=16設置(地址移動)DI=0PUSH DI依次顯示該行的段地址、偏移地址、16個ASCII碼以及16個字節(jié)顯示換行 POP DI將DI加16接上一行讀取 NCX=0? Y結束圖3.2 總體設計()段地址顯示:開始MOV BX,DATA(段地址)CH=4 循環(huán)次數CL=4 位移位數將BX高四位移至低四位并取出加30H判斷是十六進制數字還是字母,是數字? N加7 Y顯示CH=CH-1 CH0? Y N結束圖3.3 段地址顯示()偏移地址顯示:開始LEA BX,BUF1DI(偏移地址)CH=4 循環(huán)次數CL=4 位移位數將BX高四位移至低四位并取出加30H判斷是十六進制數字還是字母,是數字? N加7 Y顯示CH=CH-1 CH0? Y N結束圖3.4 偏移地址顯示()ASCII碼顯示(一次顯示八個字節(jié),調用兩次):開始SI=0MOV BL,BUF1DICH=2 循環(huán)次數CL=4 位移位數將BL高四位移至低四位并取出加30H判斷是十六進制數字還是字母,是數字? N加7 Y顯示CH=CH-1 CH0? Y NINC DI INC SI SI=8?空格 N Y結束圖3.5 ASCII碼顯示()字符顯示:開始SI=0 DI=DI-16MOV DL,BUF1DIDL20H? Y N顯示字符顯示“.”INC DI INC SISI=16? N Y結束圖3.6 字符顯示表3-3文件顯示中的主要子函數及功能表子函數功能DISPLAYD命令顯示子程序,是對顯示的各部分的總體控制,其內部分為段地址顯示、偏移地址顯示、ASCII碼顯示、字符顯示DISP2顯示段地址和偏移地址,0-9以30H-39H顯示,如果是A-Z,則將其內容加7,以41H-5AH顯示ASCII顯示每一行16個字節(jié)的ASCII碼ELEMENT顯示每一行ASCII碼對應的實際字符,有效字符按照對應ASCII碼顯示,無效字符用“.”表示顯示文件內容時要注意D命令格式的排版,必須要按照嚴格的要求和順序進行,同時對相應地址內容的讀取也要做到心中有數,否則很容易造成地址不清楚而導致讀取內容錯誤。4. 源程序清單DATA SEGMENT BUF1 DB 256 DUP( ? ) ;存放文件內容 BUF DB 10,? ;第一個為緩沖區(qū)最大字符數 第二個為實際輸入的字符數 FILE DB 10 DUP( ? ) ;FILE來存儲實際的內容 HANDLE DW ? ERROR_MESSAGE DB 0AH,ERROR!,$ MESSAGE DB Please input the filename:,0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA DX,MESSAGE MOV AH,9 INT 21H CALL IN_FINAME CALL OPENF MOV CX,16 MOV DI,0 FLAG: CALL DISPLAY ADD DI,16 loop FLAG MOV AH,1 INT 21H MOV AX,4C00H INT 21HIN_FINAME PROC NEAR ;鍵盤輸入子程序設計 LEA DX, BUF MOV AH,0AH INT 21H MOV BL, BUF+1 MOV BH, 0 MOV FILEBX, 0 RETIN_FINAME ENDPOPENF PROC NEAR ;打開文件子程序設計 PUSH AX PUSH BX push CX MOV DX, OFFSET FILE ;將文件名首地址給DX MOV AL,0 ;AL置0 讀模式 MOV AH,3DH ;打開文件 INT 21H JC ERROR ;CF=1失敗 MOV HANDLE, AX ;成功則文件代號 MOV BX,AX ;讀文件的文件代號 MOV CX,256 ;讀取字節(jié)數 MOV DX,OFFSET BUF1 ;BUF1首地址給DX,文件內容 MOV AH, 3FH ;讀文件 INT 21H JC ERROR ;CF=1失敗 MOV BX,AX MOV BUF1BX,0 ;成功則送結尾標志 MOV BX, HANDLE ;將文件代號給BX MOV AH, 3EH ;關閉文件 INT 21H JNC END1 ;CF=0ERROR:MOV DX,OFFSET ERROR_MESSAGE MOV AH,9 INT 21HEND1: POP CX POP BX POP AX RETOPENF ENDP DISPLAY PROC NEAR ;D命令顯示子程序設計 PUSH DI MOV BX,DATA CALL DISP2 ;顯示段地址 MOV AH,2 MOV DL,: INT 21H LEA BX,BUF1DI ;顯示偏移地址 call DISP2 MOV AH,2 MOV DL,20H INT 21H CALL ASCII ;前面8個H MOV DL,- MOV AH,2 INT 21H CALL ASCII ;后面8個H MOV AH,2 MOV DL,20H INT 21H SUB DI,16 CALL ELEMENT MOV AH,2 MOV DL,0AH INT 21H POP DI RETDISPLAY ENDPDISP2 PROC NEAR PUSH AX PUSH CX PUSH DX MOV CH,4 ;循環(huán)次數REP2: MOV CL,4 ;位移位數 ROL BX,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH JL PRIN2 ADD DL,7PRIN2: MOV AH,2 INT 21H DEC CH JNZ REP2 POP DX POP CX POP AX RET ;循環(huán)四次,把BX中的內容從高位到低位顯示DISP2 ENDP ASCII PROC NEAR PUSH AX PUSH CX PUSH DX MOV SI,0 ASCII1: MOV BL,BUF1DI ;把目前所指存入BL CALL DISP1 INC DI INC SI CMP SI,8 JE EXIT1 MOV AH,2 MOV DL,20H INT 21H JMP ASCII1EXIT1: POP DX POP CX POP AX RET ASCII ENDPDISP1 PROC NEAR PUSH AX PUSH CX PUSH DX MOV CH,2REP1: MOV CL,4 ROL BL,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH JL PRIN1 ADD DL,7PRIN1: MOV AH,2 INT 21H DEC CH JNZ REP1 POP DX POP CX pop AX RETDISP1 ENDP ELEMENT PROC NEAR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年河北省唐山市高一上學期期中考試歷史試卷
- 2025年債務糾紛導致離婚協(xié)議書策劃模板
- 2025年企業(yè)暫時性停止勞動合同樣本
- 2025年策劃復婚關系解除協(xié)議書樣本
- 2025年滌綸短纖項目申請報告模稿
- 2025年農產品加工與合作協(xié)議書
- 2025年水蘇糖項目立項申請報告模板
- 建筑工地外部協(xié)作單位安全合作協(xié)議書
- 2025年信息技術服務合同續(xù)簽
- 2025年住宅區(qū)物品存放室租賃合同范文
- 教師培訓校園安全工作課件校園安全管理培訓課程教學
- 初中七 八年級生物思維導圖大全 張
- 婆媳關系證明
- 江蘇宿遷家鄉(xiāng)介紹旅游課件
- 莎士比亞十四行詩之十八課件
- 幼兒園中班語言《拼小人》課件
- 文化差異與跨文化交際課件(完整版)
- 臭和味檢測原始記錄表
- 變壓器檢修風險分析及管控措施
- 勞務派遣公司介紹ppt課件(PPT 35頁)
- 紀檢監(jiān)察機關派駐機構工作規(guī)則PPT
評論
0/150
提交評論