




已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目 錄1. 題目12. 程序總體設(shè)計(jì)方案、思路13. 程序設(shè)計(jì)框圖34. 源程序清單115. 程序調(diào)試結(jié)果及分析186. 設(shè)計(jì)總結(jié)216.1問(wèn)題216.2心得21湖南工程學(xué)院課程設(shè)計(jì)報(bào)告1. 題目讀入一個(gè)文本文件并以DEBUG中的D命令格式顯示2. 程序總體設(shè)計(jì)方案、思路本程序是讀入一個(gè)文本文件并以DEBUG中的D命令格式顯示。 操作環(huán)境是32位的windows XP系統(tǒng),使用CmasmW軟件(本人使用Masm軟件,操作環(huán)境是64位WINDOWS 7)進(jìn)行匯編。本程序要求以DEBUG中的D命令格式顯示一個(gè)文本文件,文件名從鍵盤(pán)鍵入,大體思路為打開(kāi)相應(yīng)文件,讀文件至程序緩沖區(qū),并按照要求顯示,以下是我本次課程設(shè)計(jì)的詳細(xì)方案、思路:本程序要求用D命令格式顯示內(nèi)容,使用DEBUG中的D命令格式顯示一個(gè)文本文件時(shí),顯示寄存器中的內(nèi)容大致為:段地址、偏移地址、ASCII碼部分(每個(gè)字節(jié)的值都用ASCII碼表示)和字符顯示部分(將ASCII碼轉(zhuǎn)化為字符顯示),每個(gè)非打印字符(無(wú)效的字符)在顯示時(shí)用“.”表示,每行顯示16個(gè)字節(jié)的內(nèi)容,第8個(gè)字節(jié)和第9個(gè)字節(jié)之間有一個(gè)連接字符“-”。每個(gè)顯示行從16字節(jié)的邊界上開(kāi)始。程序主要由兩大塊組成,第一塊是文件的獲取,包括鍵入、打開(kāi)、讀取和關(guān)閉,其中主要涉及基本DOS系統(tǒng)功能調(diào)用指令的使用。第二塊是文件的顯示,包括段地址、偏移地址、以及讀取的文件內(nèi)容(ASCII碼及對(duì)應(yīng)的符號(hào)),其中就涉及到多次轉(zhuǎn)移和循環(huán),需要多個(gè)子程序的支持才能實(shí)現(xiàn)(注意子程序要進(jìn)行存儲(chǔ)保護(hù)和恢復(fù))。程序開(kāi)始之前,首先在DATA SEGMENT數(shù)據(jù)段中定義BUF1用來(lái)存儲(chǔ)讀取的文件,用BUF來(lái)存儲(chǔ)文件名的最大字符緩沖以及實(shí)際輸入的字符個(gè)數(shù),通過(guò)相連的FILE來(lái)保存實(shí)際輸入的文件名,HANDLE的作用是在成功打開(kāi)文件后保存文件代號(hào),ERROR_MESSAGE和MESSAGE分別是提示語(yǔ)句,用來(lái)提示錯(cuò)誤和鍵入值。第一大塊(文件的獲?。┑膬?nèi)容主要依靠基本的鍵盤(pán)鍵入以及文件存儲(chǔ)實(shí)現(xiàn):1. 首先要鍵盤(pán)輸入需要顯示內(nèi)容的文件名,通過(guò)0A號(hào)功能鍵入一個(gè)文件名到緩沖區(qū),用BUF來(lái)存放緩沖區(qū)最大字符數(shù)和實(shí)際輸入的文件名的長(zhǎng)度,其中并不存放文件名,真正的文件名用FILE來(lái)存放,輸入完以后在FILE末給“0”(MOV指令)以結(jié)束并確認(rèn)輸入,文件名鍵入完成;2. 鍵入完成后,打開(kāi)文件,通過(guò)3D號(hào)功能打開(kāi)文件,需要先將AL置0以選擇讀功能(AL=1為寫(xiě),2為讀/寫(xiě)),將FILE文件名首地址給DX以讀取文件名,如果打開(kāi)失敗則顯示錯(cuò)誤,AX=錯(cuò)誤碼,如果成功則AX=文件代號(hào),文件代號(hào)需要通過(guò)第三方保存,因?yàn)樵诤罄m(xù)操作需要使用,進(jìn)入下一步;3. 通過(guò)3F號(hào)功能讀取文件,調(diào)用參數(shù)BX=文件代號(hào),CX=讀取字節(jié)數(shù),用BUF1讀取文件的內(nèi)容,如果讀取文件失敗,則顯示錯(cuò)誤,AX=錯(cuò)誤碼,如果成功讀取文件,則文件保存在BUF1中,AX=實(shí)際讀入的字節(jié)數(shù);4. 將HANDLE中所存的文件代號(hào)給BX,通過(guò)3E號(hào)功能完成文件關(guān)閉功能,如果程序到此都沒(méi)有發(fā)生錯(cuò)誤,則運(yùn)行成功,進(jìn)入下一個(gè)階段,如失敗,則提示錯(cuò)誤,AX=錯(cuò)誤碼。第二大塊功能主要是通過(guò)循環(huán)、轉(zhuǎn)移、比較等來(lái)實(shí)現(xiàn)最終顯示:1. 由于D命令格式顯示有其特殊的要求(上文已經(jīng)提及),所以在設(shè)計(jì)時(shí)也應(yīng)該考慮在內(nèi),本程序設(shè)置256個(gè)字符,每行顯示16個(gè)字節(jié),共16行,這里可以用到loop循環(huán)16次,每一次顯示一行內(nèi)容;2. 顯示段地址,調(diào)用子程序顯示段地址,將DATA段的地址給BX,通過(guò)4次循環(huán)(一次左移4位)依次讀出4個(gè)4位二進(jìn)制數(shù),用4位16進(jìn)制表示,具體規(guī)則是,將每次循環(huán)到低位的數(shù)和0FH相與,只留下最低4位,讓其與30H相加,如果小于3AH,說(shuō)明是0-9之間的數(shù),由16進(jìn)制的規(guī)則可知他們都可以直接顯示,如果大于等于3A,則要將其加7(如A 對(duì)應(yīng)10,加30H后為3A,加7后為41H,為A對(duì)應(yīng)的ASCII碼),經(jīng)過(guò)循環(huán)后,可以將段地址顯示,段地址和偏移地址間要加“:”號(hào);3. 顯示偏移地址,用DI作為偏移量,初始化為0,將BUFDI的地址給BX,以顯示段地址的方式將偏移地址顯示出,然后顯示一個(gè)空格;4. 前8個(gè)對(duì)應(yīng)字符ASCII碼的顯示,因?yàn)镈命令格式要求8個(gè)字符中間要加一個(gè)“-”號(hào),所以在程序編寫(xiě)時(shí)要分兩次進(jìn)行,中間加上“-”號(hào)。通過(guò)8次循環(huán)來(lái)依次顯示前8個(gè)字節(jié),通過(guò)BUF1DI依次讀取BUF1中的內(nèi)容,DI初始為0;5. 后8個(gè)對(duì)應(yīng)字符ASCII碼的顯示原理與第4步相同,在此不進(jìn)行過(guò)多闡述;6. 顯示ASCII碼對(duì)應(yīng)的字符,由于之前DI已經(jīng)增到16,但我們需要重新開(kāi)始讀取BUF1,以此來(lái)顯示改行最開(kāi)始的字符,所以要先將DI減16,回到每一行的最初位置,再通過(guò)16次循環(huán)將每行16個(gè)字節(jié)顯示出來(lái),這里要注意D命令格式的要求,每個(gè)非打印字符在顯示的ASCII部分由“.”表示;7. 每一行顯示完畢以后,由于會(huì)執(zhí)行POP DI的操作,所以DI=16的值會(huì)被清楚,在進(jìn)行顯示下一行時(shí),先要人為將DI加16,使當(dāng)前地址指向BUF1的第16個(gè)位置,而不是重新開(kāi)始,經(jīng)過(guò)16次循環(huán)后,256個(gè)字節(jié)將全部顯示出來(lái)。3. 程序設(shè)計(jì)框圖(1) 第一塊設(shè)計(jì)框圖:關(guān)于文件獲取,包括鍵入、打開(kāi)、讀取以及關(guān)閉。開(kāi)始0A號(hào)功能鍵入文件名3D號(hào)功能打開(kāi)文件打開(kāi)成功?(CF=0?)發(fā)生錯(cuò)誤 N YHANDLE=文件代號(hào)BX=文件代號(hào)CX=字節(jié)數(shù)3F號(hào)功能讀取文件讀取成功?(CF=0?) N發(fā)生錯(cuò)誤 YBX=文件代號(hào)3E號(hào)功能關(guān)閉文件結(jié)束圖3.1 文件獲取表3-1文件獲取中使用的DOS系統(tǒng)功能調(diào)用表功能調(diào)用參數(shù)返回參數(shù)0A 鍵盤(pán)輸入到緩沖區(qū)DS:DX=緩沖區(qū)首址(DS:DX)=緩沖區(qū)最大字符數(shù)(DS:DX+1)=實(shí)際輸入的字符數(shù)3D打開(kāi)文件DS:DX=ASCIZ串地址AL=訪(fǎng)問(wèn)和文件共享方式0=讀 1=寫(xiě) 2=讀/寫(xiě)成功:AX=文件代號(hào)失敗:AX=錯(cuò)誤碼3E 關(guān)閉文件BX=文件代號(hào)失?。篈X=錯(cuò)誤碼3F 讀文件或設(shè)備DS:DX=數(shù)據(jù)緩沖區(qū)地址BX=文件代號(hào)CX=讀取的字節(jié)數(shù)成功:AX=實(shí)際寫(xiě)入的字節(jié)數(shù) AX=0已到文件失?。篈X=錯(cuò)誤碼該表中詳細(xì)列舉了文件獲取中需要使用的一些DOS系統(tǒng)調(diào)用功能,調(diào)用參數(shù)可以看作功能使用所需要的前提條件,返回參數(shù)是運(yùn)行后的一個(gè)返回值,在程序設(shè)計(jì)中要注意每一個(gè)功能使用之前必須將調(diào)用參數(shù)配置好,否則會(huì)出現(xiàn)錯(cuò)誤。表3-2文件獲取中的主要子函數(shù)及功能表子函數(shù)功能IN_FINAME用于文件名的鍵入OPENF用于文件內(nèi)容的獲取文件名的鍵入要注意哪個(gè)寄存器存字符數(shù),哪個(gè)寄存器存儲(chǔ)真正的文件名,以及鍵入完成后需要進(jìn)行的操作,文件的獲取要注意表3-1中的條件。(2) 第二塊設(shè)計(jì)框圖:關(guān)于段地址、偏移地址、16個(gè)ASCII碼、16個(gè)字節(jié)的顯示()總體設(shè)計(jì):開(kāi)始設(shè)置循環(huán)次數(shù)(行數(shù))CX=16設(shè)置(地址移動(dòng))DI=0PUSH DI依次顯示該行的段地址、偏移地址、16個(gè)ASCII碼以及16個(gè)字節(jié)顯示換行 POP DI將DI加16接上一行讀取 NCX=0? Y結(jié)束圖3.2 總體設(shè)計(jì)()段地址顯示:開(kāi)始MOV BX,DATA(段地址)CH=4 循環(huán)次數(shù)CL=4 位移位數(shù)將BX高四位移至低四位并取出加30H判斷是十六進(jìn)制數(shù)字還是字母,是數(shù)字? N加7 Y顯示CH=CH-1 CH0? Y N結(jié)束圖3.3 段地址顯示()偏移地址顯示:開(kāi)始LEA BX,BUF1DI(偏移地址)CH=4 循環(huán)次數(shù)CL=4 位移位數(shù)將BX高四位移至低四位并取出加30H判斷是十六進(jìn)制數(shù)字還是字母,是數(shù)字? N加7 Y顯示CH=CH-1 CH0? Y N結(jié)束圖3.4 偏移地址顯示()ASCII碼顯示(一次顯示八個(gè)字節(jié),調(diào)用兩次):開(kāi)始SI=0MOV BL,BUF1DICH=2 循環(huán)次數(shù)CL=4 位移位數(shù)將BL高四位移至低四位并取出加30H判斷是十六進(jìn)制數(shù)字還是字母,是數(shù)字? N加7 Y顯示CH=CH-1 CH0? Y NINC DI INC SI SI=8?空格 N Y結(jié)束圖3.5 ASCII碼顯示()字符顯示:開(kāi)始SI=0 DI=DI-16MOV DL,BUF1DIDL20H? Y N顯示字符顯示“.”INC DI INC SISI=16? N Y結(jié)束圖3.6 字符顯示表3-3文件顯示中的主要子函數(shù)及功能表子函數(shù)功能DISPLAYD命令顯示子程序,是對(duì)顯示的各部分的總體控制,其內(nèi)部分為段地址顯示、偏移地址顯示、ASCII碼顯示、字符顯示DISP2顯示段地址和偏移地址,0-9以30H-39H顯示,如果是A-Z,則將其內(nèi)容加7,以41H-5AH顯示ASCII顯示每一行16個(gè)字節(jié)的ASCII碼ELEMENT顯示每一行ASCII碼對(duì)應(yīng)的實(shí)際字符,有效字符按照對(duì)應(yīng)ASCII碼顯示,無(wú)效字符用“.”表示顯示文件內(nèi)容時(shí)要注意D命令格式的排版,必須要按照嚴(yán)格的要求和順序進(jìn)行,同時(shí)對(duì)相應(yīng)地址內(nèi)容的讀取也要做到心中有數(shù),否則很容易造成地址不清楚而導(dǎo)致讀取內(nèi)容錯(cuò)誤。4. 源程序清單DATA SEGMENT BUF1 DB 256 DUP( ? ) ;存放文件內(nèi)容 BUF DB 10,? ;第一個(gè)為緩沖區(qū)最大字符數(shù) 第二個(gè)為實(shí)際輸入的字符數(shù) FILE DB 10 DUP( ? ) ;FILE來(lái)存儲(chǔ)實(shí)際的內(nèi)容 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 ;鍵盤(pán)輸入子程序設(shè)計(jì) LEA DX, BUF MOV AH,0AH INT 21H MOV BL, BUF+1 MOV BH, 0 MOV FILEBX, 0 RETIN_FINAME ENDPOPENF PROC NEAR ;打開(kāi)文件子程序設(shè)計(jì) PUSH AX PUSH BX push CX MOV DX, OFFSET FILE ;將文件名首地址給DX MOV AL,0 ;AL置0 讀模式 MOV AH,3DH ;打開(kāi)文件 INT 21H JC ERROR ;CF=1失敗 MOV HANDLE, AX ;成功則文件代號(hào) MOV BX,AX ;讀文件的文件代號(hào) MOV CX,256 ;讀取字節(jié)數(shù) MOV DX,OFFSET BUF1 ;BUF1首地址給DX,文件內(nèi)容 MOV AH, 3FH ;讀文件 INT 21H JC ERROR ;CF=1失敗 MOV BX,AX MOV BUF1BX,0 ;成功則送結(jié)尾標(biāo)志 MOV BX, HANDLE ;將文件代號(hào)給BX MOV AH, 3EH ;關(guān)閉文件 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命令顯示子程序設(shè)計(jì) 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個(gè)H MOV DL,- MOV AH,2 INT 21H CALL ASCII ;后面8個(gè)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)次數(shù)REP2: MOV CL,4 ;位移位數(shù) 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中的內(nèi)容從高位到低位顯示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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 半年工作總結(jié)
- 精神科中醫(yī)調(diào)理方案
- 化工應(yīng)用專(zhuān)業(yè)畢業(yè)論文
- 2025年數(shù)字式壓磁應(yīng)力測(cè)量?jī)x合作協(xié)議書(shū)
- 畢業(yè)論文寫(xiě)作專(zhuān)業(yè)
- 通信專(zhuān)業(yè)畢業(yè)論文范文
- GmNAC181在大豆鉀養(yǎng)分高效中的功能及鉀高效種質(zhì)材料創(chuàng)制
- 谷子中MAPKKK家族的鑒定和在干旱脅迫下通路研究
- 會(huì)展攤位服務(wù)合同范例
- 七年級(jí)數(shù)學(xué)上冊(cè)第1章有理數(shù)1.4有理數(shù)的乘除法1.4.2有理數(shù)的除法1教案無(wú)答案新版新人教版
- 2025年合肥共達(dá)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2025美國(guó)急性冠脈綜合征(ACS)患者管理指南解讀課件
- 足球迷互動(dòng)活動(dòng)策劃與執(zhí)行策略
- 2025年寧夏工商職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- ESC+2024+心房顫動(dòng)(房顫)管理指南解讀
- 2019地質(zhì)災(zāi)害防治工程工程量清單計(jì)價(jià)規(guī)范
- 2022-2024年江蘇中考英語(yǔ)試題匯編:任務(wù)型閱讀填空和閱讀回答問(wèn)題(教師)
- 游戲跨文化傳播-洞察分析
- 三級(jí)機(jī)動(dòng)車(chē)駕駛教練員職業(yè)資格理論題庫(kù)(匯總版)
- A4標(biāo)簽打印模板
- 矛盾糾紛排查調(diào)處記錄表
評(píng)論
0/150
提交評(píng)論