版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、武漢理工大學微機原理課程設計說明書摘要隨著科學技術的飛速發(fā)展,計算機在現(xiàn)代科學技術的發(fā)展中起著越來越重要的作用。多媒體技術、計算機網絡技術、智能信息處理技術、自適用控制技術、數(shù)據(jù)挖掘與處理技術、機械設計CAD、金融電子等都離不開計算機,微機原理與接口技術在此應運而生。本次課程設計是基于微機原理與接口技術的簡單應用,運用在微機原理和接口技術課程上所學的匯編語言知識完成閏年的判斷。眾所周知,閏年的判斷方法是:年份的數(shù)值能被4整除而不能被100整除,或者能被400整除。本課程設計的主的主要任務也是基于這樣的算法利用匯編語言來完成閏年的判斷。關鍵詞:微機原理,匯編語言,算法,閏年1摘要隨著科學技術的飛
2、速發(fā)展,計算機在現(xiàn)代科學技術的發(fā)展中起著越來越重要的作用。多媒體技術、計算機網絡技術、智能信息處理技術、自適用控制技術、數(shù)據(jù)挖掘與處理技術、機械設計CAD、金融電子等都離不開計算機,微機原理與接口技術在此應運而生。本次課程設計是基于微機原理與接口技術的簡單應用,運用在微機原理和接口技術課程上所學的匯編語言知識完成閏年的判斷。眾所周知,閏年的判斷方法是:年份的數(shù)值能被4整除而不能被100整除,或者能被400整除。本課程設計的主的主要任務也是基于這樣的算法利用匯編語言來完成閏年的判斷。關鍵詞:微機原理,匯編語言,算法,閏年自動判斷閏年1 設計內容及要求本次課程的內容是自動判斷閏年,要求輸入具體的年
3、份后,輸出是否為閏年的提示信息,并且可接著輸入年份繼續(xù)判斷,同時支持多個年份同時輸入,并給出判斷結果,按Q或q鍵退出程序。由于此程序比較簡單,增設輸入錯誤提示功能,當輸入的根本就不是年份時,系統(tǒng)就會提示錯誤并重新輸入。2 概要設計2.1 系統(tǒng)總體分析判斷閏年的具體算法為:如果該年份的數(shù)值能被4整除卻不能被100整除,或者該年份的數(shù)值能被400整除,則該數(shù)值代表的年份為閏年。由于輸入的十進制數(shù)相當于字符串以ASCII碼形式存在輸入緩沖區(qū),因此在進行閏年判斷時需將其轉化為十進制數(shù)進行判斷。由于任務要求程序能夠實現(xiàn)多輸入判斷功能,因此需要循環(huán)檢測存儲區(qū)的數(shù)據(jù)然后依次判斷輸出。此處通過判斷輸入字符是否
4、為逗號,決定是否將轉換的數(shù)存入另一存儲區(qū),通過檢測輸入字符是否為回車,決定是否退出子程序。2.2 各模塊框圖此程序雖然不難,但也不是很短,因此為了讓程序條理清晰,我將整段程序分為三個模塊: MAIN、INPUT和JUDGE。各模塊的程序流程圖分別如圖2-1、2-2、及2-3所示。圖2-1 MAIN模塊流程圖圖2-2 INPUT模塊流程圖圖2-3 JUDGE模塊流程圖3 詳細設計3.1 各模塊說明主模塊MAIN用來顯示提示輸入以及輸入的字符內容,最后輸出做出的判斷并確定是否退出程序;INPUT子模塊用來將數(shù)字字符串轉換為數(shù)字,以便進行下面的程序操作,同時對輸入的年份格式進行判斷,若格式錯誤則輸出
5、Input illegal!,并要求重新輸入年份;JUDGE子模塊用來判斷所輸入的年份是否為閏年,若輸入閏年2000則輸出2000 is leap year!,若輸入非閏年1000則輸出1000 is not leap year??;若輸入為1000,2000,12則輸出1000 is not leap year ! 2000 is leap year! 12 is leap year!。 3.2 各模塊詳細設計在主模塊MAIN中分別調用兩個子模塊INPUT、JUDGE,做出判斷后顯示是否退出的提示信息,按下任意鍵繼續(xù),按下Q或q鍵則退出程序。MAIN主模塊的程序代碼如下。START: MOV
6、AX,DATA MOV DS,AX LOP0: CALL INPUT ;調用INPUT子模塊 CALL JUDGE ;調用JUDGE子模塊 LEA DX,MESS ;顯示提示信息 MOV AH,9 ;多字符輸出 INT 21H MOV AH,08H ;鍵盤輸入無回顯 INT 21H CMP AL,Q ;輸入Q或q退出程序 JE EXIT CMP AL,q JE EXIT LEA DX,NEW ;回車、換行 MOV AH,9 INT 21H JMP LOP0EXIT: MOV AH,4CH INT 21HINPUT子模塊首先判斷輸入的年份是否正確,由于我們的要求必須輸入數(shù)字年份,若不是系統(tǒng)會提示
7、錯誤。因為輸入的年份是字符串,因此需要轉換為數(shù)。數(shù)字所對應的ASCII值與他們相差30H,所以只需要將所輸入的字符減30H就可以得到相應的數(shù)置。若輸入的是非數(shù)字,那么經轉換后得到的數(shù)值就不再0到9之間,此時系統(tǒng)會提示錯誤。同時設計要求能夠支持多輸入然后同時判斷,因此程序設計循環(huán)檢測回車和逗號,當檢測到回車時則退出INPUT模塊進入JUDGE模塊,當檢測到逗號時,則先將轉化后的數(shù)存在另一個存儲區(qū),然后繼續(xù)轉換數(shù)字字符串。其部分程序如下 S4: MOV DL,BYTE PTR BX SUB DL,30H ;輸入字符的ASCII值減去30H得到對應的數(shù)值 CMP DL,0 ;數(shù)值小于0則系統(tǒng)提示錯誤
8、 JB ERROR1 CMP DL,9 ; 數(shù)值大于9則系統(tǒng)提示錯誤 JA ERROR1 ADD AX,DX MOV DL,BYTE PTR BX+1 CMP DL,0DH ;檢測字符是否為回車 JZ S2 CMP DL,2CH ;檢測字符是否為逗號 JZ S3 INC BX MOV DX,10 MUL DX JMP S4S3: INC BX MOV SI,AX ADD SI,2 INC BX JMP S4ERROR1: LEA DX,NEW MOV AH,9 INT 21H LEA DX,ERROR ;系統(tǒng)提示錯誤信息 MOV AH,9 INT 21H LEA DX,NEW MOV AH,9
9、 INT 21H JMP S1 JUDGE子模塊用來判斷所輸入的年份是否為閏年,先用轉換后的數(shù)值除以4,若不能整除,則肯定不是閏年,若可以整除則再用其除以100,若不能整除,則肯定是閏年,若能整除則說明不是閏年。最后用轉換后的數(shù)值除以400,若可以整除,則肯定是閏年,否則就不是閏年。其核心算法如下。 B1: POP AX MOV DX,0 MOV CX,AX ;將AX中的值暫存在CX中 MOV BX,4 DIV BX ;年份對應的數(shù)值除以4 CMP DX,0 JNE NO MOV AX,CX MOV DX,0 MOV BX,100 ;年份對應的數(shù)值除以100 DIV BX CMP DX,0 J
10、NE YES MOV AX,CX MOV DX,0 MOV BX,400 ;年份對應的數(shù)值除以400 DIV BX CMP DX,0 JNE NO YES: ;顯示閏年提示信息 LEA DX,LEAP MOV AH,9 INT 21H JMP LOP1 NO: ;顯示非閏年提示信息 LEA DX,NLEAP MOV AH,9 INT 21H JMP LOP1 在判斷閏年時輸入數(shù)據(jù)可能是多個年份,因此需要循環(huán)檢測存儲區(qū)被轉換過的年份,當檢測到為0時則退出JUDGE子程序。程序段如下LOP1: INC DI MOV DX,WORD PTR SI CMP DX,0 JZ B2 ADD SI,2 PU
11、SH DX LEA DX,NEW MOV AH,9 INT 21HC1: MOV DL,BYTE PTR DI CMP DL,0DH JZ B1 CMP DL,2CH JZ B1 MOV AH,2 INT 21H INC DI JMP C1退出JUDGE子程序段如下B2: LEA DX,NEW MOV AH,9 INT 21H POP DI POP SI POP AX POP DX POP CX POP BX RET 4 程序調試4.1 運行界面分析執(zhí)行程序后的初始界面如圖4-1所示。圖4-1輸入年份1000后執(zhí)行程序,界面如圖4-2所示。圖4-2此時按下除Q和q的任意鍵可以繼續(xù)執(zhí)行程序,界面
12、如圖4-3所示。圖4-3輸入年份1000,2000,12后再次執(zhí)行程序,界面如圖4-4所示。圖4-4按下除Q和q的任意鍵可以繼續(xù)執(zhí)行程序,若此時輸入的年份是輸入的是字母、符號等,系統(tǒng)會提示錯誤并要求重新輸入,如輸入abcd時界面如圖4-5所示。圖4-5輸入了正確格式的年份后繼續(xù)執(zhí)行程序,然后按下Q或者q可以退出程序。4.2 調試過程及分析 在各個子程序編寫過程中,由于運用較多循環(huán),導致目標地址命名有些混亂,在匯編時出現(xiàn)語法類的錯誤,還好此類錯誤比較容易發(fā)現(xiàn)并及時做好更改。而在程序調試過程中,由于循環(huán)設置不當,導致數(shù)字字符串進行轉換時溢出,造成判斷結果有誤,有時還會出現(xiàn)無結果輸出狀態(tài)。此類錯誤不
13、屬于語法范疇,通常是算法編寫有些問題,導致程序運行混亂,在這種情況下,我只好采用單步運行程序,最后發(fā)現(xiàn)問題所在將轉換算法進行修改,才得以恢復正常輸出。5 心得體會微機原理與接口技術這門課程在最初接觸時,由于沒有找到有效的學習方法,面對較多的新名詞、新語言,導致學習效果不佳。后來細心學習之后,發(fā)現(xiàn)匯編語言與C語言的編程思想有很多類似之處,其指令形式雖然不一樣,但一些基本的語句結構基本相同,如順序結構、分支結構和循環(huán)結構等。雖然匯編語言沒有C語言那么方便,但也能實現(xiàn)大部分的程序編寫功能。也是在細學之后,才發(fā)現(xiàn)匯編語言的強大功能,也真切體會到軟件相對硬件的優(yōu)越之處。通過這次課程設計使我懂得了理論與實
14、際相結合是很重要的,后悔平時學習中的眼高手低;同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。同時經過這次課程設計,我知道了平時要養(yǎng)成多查閱資料的好習慣,不要遇到不懂的就問別人,只有經過自己的一番努力思考再與老師或同學討論,才能真正的學到知識。當你拿到一個任務但卻無從下手時,不妨將任務細分成若干小任務,然后各個擊破,逐一拿下。也正是運用這種思想,我把程序分成幾個子程序分別編寫,最后再匯總調試程序,當發(fā)現(xiàn)問題時,可以分別查看子程序進行修改,方便快捷而且思路清晰,既方便自己程序的調試,又方便了閱讀者的理清我的編程思路??偟膩碚f,通過這次課程設計,我受益匪淺
15、,掌握了一些匯編編程的經驗及小技巧,我想這些經驗在以后的學習和工作中都是用得著的。附錄 程序清單DATA SEGMENT INBUFF DB 20,0,20 DUP(0) ;定義輸入緩沖區(qū) YEAR DW 20 DUP(0) I DB 0DH,0AH,Please input the year:,$ ERROR DB Input illegal!,$ LEAP DB is leap year!,$ NLEAP DB is not leap year!,$ MESS DB If you want to quit please press .q/Q. DB 0DH,0AH,Press other
16、key to continue,$ NEW DB 0DH,0AH,$DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LOP0: CALL INPUT ;調用INPUT子模塊 CALL JUDGE ;調用JUDGE子模塊 LEA DX,MESS ;顯示提示信息 MOV AH,9 ;多字符輸出 INT 21H MOV AH,08H ;鍵盤輸入無回顯 INT 21H CMP AL,Q ;輸入Q或q退出程序 JE EXIT CMP AL,q JE EXIT LEA DX,NEW ;回車、換行 MOV
17、AH,9 INT 21H JMP LOP0EXIT: MOV AH,4CH INT 21HINPUT PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI S1: LEA DX,I ;輸入年份提示 MOV AH,9 INT 21H LEA DX,INBUFF MOV AH,0AH INT 21H LEA BX,INBUFF+2 MOV AX,0 MOV DX,0 LEA SI,YEAR MOV CX,20S5: MOV SI,0 INC SI LOOP S5 LEA SI,YEAR S4: MOV DL,BYTE PTR BX SUB DL,30H ;輸入字符的A
18、SCII值減去30H得到對應的數(shù)值 CMP DL,0 ;數(shù)值小于0則系統(tǒng)提示錯誤 JB ERROR1 CMP DL,9 ; 數(shù)值大于9則系統(tǒng)提示錯誤 JA ERROR1 ADD AX,DX MOV DL,BYTE PTR BX+1 CMP DL,0DH JZ S2 CMP DL,2CH JZ S3 INC BX MOV DX,10 MUL DX JMP S4S3: INC BX MOV SI,AX ADD SI,2 INC BX JMP S4ERROR1: LEA DX,NEW MOV AH,9 INT 21H LEA DX,ERROR ;系統(tǒng)提示錯誤信息 MOV AH,9 INT 21H L
19、EA DX,NEW MOV AH,9 INT 21H JMP S1 S2: MOV SI,AX MOV CX,AX LEA DX,NEW MOV AH,9 INT 21H MOV AX,CX POP SI POP DX POP CX POP BX RET INPUT ENDP JUDGE PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX PUSH SI PUSH DI LEA SI,YEAR LEA DI,INBUFF+1 LOP1: INC DI MOV DX,WORD PTR SI CMP DX,0 JZ B2 ADD SI,2 PUSH DX LEA DX,NEW MOV AH,9 INT 21HC1: MOV DL,BYTE PTR DI CMP DL,0DH JZ B1 CMP DL,2CH JZ B1 MOV AH,2 INT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論