自動(dòng)判斷閏年(微機(jī)原理課設(shè))_第1頁
自動(dòng)判斷閏年(微機(jī)原理課設(shè))_第2頁
自動(dòng)判斷閏年(微機(jī)原理課設(shè))_第3頁
自動(dòng)判斷閏年(微機(jī)原理課設(shè))_第4頁
自動(dòng)判斷閏年(微機(jī)原理課設(shè))_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、武漢理工大學(xué)微機(jī)原理課程設(shè)計(jì)說明書摘要隨著科學(xué)技術(shù)的飛速發(fā)展,計(jì)算機(jī)在現(xiàn)代科學(xué)技術(shù)的發(fā)展中起著越來越重要的作用。多媒體技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、智能信息處理技術(shù)、自適用控制技術(shù)、數(shù)據(jù)挖掘與處理技術(shù)、機(jī)械設(shè)計(jì)CAD、金融電子等都離不開計(jì)算機(jī),微機(jī)原理與接口技術(shù)在此應(yīng)運(yùn)而生。本次課程設(shè)計(jì)是基于微機(jī)原理與接口技術(shù)的簡(jiǎn)單應(yīng)用,運(yùn)用在微機(jī)原理和接口技術(shù)課程上所學(xué)的匯編語言知識(shí)完成閏年的判斷。眾所周知,閏年的判斷方法是:年份的數(shù)值能被4整除而不能被100整除,或者能被400整除。本課程設(shè)計(jì)的主的主要任務(wù)也是基于這樣的算法利用匯編語言來完成閏年的判斷。關(guān)鍵詞:微機(jī)原理,匯編語言,算法,閏年1摘要隨著科學(xué)技術(shù)的飛

2、速發(fā)展,計(jì)算機(jī)在現(xiàn)代科學(xué)技術(shù)的發(fā)展中起著越來越重要的作用。多媒體技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、智能信息處理技術(shù)、自適用控制技術(shù)、數(shù)據(jù)挖掘與處理技術(shù)、機(jī)械設(shè)計(jì)CAD、金融電子等都離不開計(jì)算機(jī),微機(jī)原理與接口技術(shù)在此應(yīng)運(yùn)而生。本次課程設(shè)計(jì)是基于微機(jī)原理與接口技術(shù)的簡(jiǎn)單應(yīng)用,運(yùn)用在微機(jī)原理和接口技術(shù)課程上所學(xué)的匯編語言知識(shí)完成閏年的判斷。眾所周知,閏年的判斷方法是:年份的數(shù)值能被4整除而不能被100整除,或者能被400整除。本課程設(shè)計(jì)的主的主要任務(wù)也是基于這樣的算法利用匯編語言來完成閏年的判斷。關(guān)鍵詞:微機(jī)原理,匯編語言,算法,閏年自動(dòng)判斷閏年1 設(shè)計(jì)內(nèi)容及要求本次課程的內(nèi)容是自動(dòng)判斷閏年,要求輸入具體的年

3、份后,輸出是否為閏年的提示信息,并且可接著輸入年份繼續(xù)判斷,同時(shí)支持多個(gè)年份同時(shí)輸入,并給出判斷結(jié)果,按Q或q鍵退出程序。由于此程序比較簡(jiǎn)單,增設(shè)輸入錯(cuò)誤提示功能,當(dāng)輸入的根本就不是年份時(shí),系統(tǒng)就會(huì)提示錯(cuò)誤并重新輸入。2 概要設(shè)計(jì)2.1 系統(tǒng)總體分析判斷閏年的具體算法為:如果該年份的數(shù)值能被4整除卻不能被100整除,或者該年份的數(shù)值能被400整除,則該數(shù)值代表的年份為閏年。由于輸入的十進(jìn)制數(shù)相當(dāng)于字符串以ASCII碼形式存在輸入緩沖區(qū),因此在進(jìn)行閏年判斷時(shí)需將其轉(zhuǎn)化為十進(jìn)制數(shù)進(jìn)行判斷。由于任務(wù)要求程序能夠?qū)崿F(xiàn)多輸入判斷功能,因此需要循環(huán)檢測(cè)存儲(chǔ)區(qū)的數(shù)據(jù)然后依次判斷輸出。此處通過判斷輸入字符是否

4、為逗號(hào),決定是否將轉(zhuǎn)換的數(shù)存入另一存儲(chǔ)區(qū),通過檢測(cè)輸入字符是否為回車,決定是否退出子程序。2.2 各模塊框圖此程序雖然不難,但也不是很短,因此為了讓程序條理清晰,我將整段程序分為三個(gè)模塊: MAIN、INPUT和JUDGE。各模塊的程序流程圖分別如圖2-1、2-2、及2-3所示。圖2-1 MAIN模塊流程圖圖2-2 INPUT模塊流程圖圖2-3 JUDGE模塊流程圖3 詳細(xì)設(shè)計(jì)3.1 各模塊說明主模塊MAIN用來顯示提示輸入以及輸入的字符內(nèi)容,最后輸出做出的判斷并確定是否退出程序;INPUT子模塊用來將數(shù)字字符串轉(zhuǎn)換為數(shù)字,以便進(jìn)行下面的程序操作,同時(shí)對(duì)輸入的年份格式進(jìn)行判斷,若格式錯(cuò)誤則輸出

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 各模塊詳細(xì)設(shè)計(jì)在主模塊MAIN中分別調(diào)用兩個(gè)子模塊INPUT、JUDGE,做出判斷后顯示是否退出的提示信息,按下任意鍵繼續(xù),按下Q或q鍵則退出程序。MAIN主模塊的程序代碼如下。START: MOV

6、AX,DATA MOV DS,AX LOP0: CALL INPUT ;調(diào)用INPUT子模塊 CALL JUDGE ;調(diào)用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子模塊首先判斷輸入的年份是否正確,由于我們

7、的要求必須輸入數(shù)字年份,若不是系統(tǒng)會(huì)提示錯(cuò)誤。因?yàn)檩斎氲哪攴菔亲址?,因此需要轉(zhuǎn)換為數(shù)。數(shù)字所對(duì)應(yīng)的ASCII值與他們相差30H,所以只需要將所輸入的字符減30H就可以得到相應(yīng)的數(shù)置。若輸入的是非數(shù)字,那么經(jīng)轉(zhuǎn)換后得到的數(shù)值就不再0到9之間,此時(shí)系統(tǒng)會(huì)提示錯(cuò)誤。同時(shí)設(shè)計(jì)要求能夠支持多輸入然后同時(shí)判斷,因此程序設(shè)計(jì)循環(huán)檢測(cè)回車和逗號(hào),當(dāng)檢測(cè)到回車時(shí)則退出INPUT模塊進(jìn)入JUDGE模塊,當(dāng)檢測(cè)到逗號(hào)時(shí),則先將轉(zhuǎn)化后的數(shù)存在另一個(gè)存儲(chǔ)區(qū),然后繼續(xù)轉(zhuǎn)換數(shù)字字符串。其部分程序如下 S4: MOV DL,BYTE PTR BX SUB DL,30H ;輸入字符的ASCII值減去30H得到對(duì)應(yīng)的數(shù)值 CM

8、P DL,0 ;數(shù)值小于0則系統(tǒng)提示錯(cuò)誤 JB ERROR1 CMP DL,9 ; 數(shù)值大于9則系統(tǒng)提示錯(cuò)誤 JA ERROR1 ADD AX,DX MOV DL,BYTE PTR BX+1 CMP DL,0DH ;檢測(cè)字符是否為回車 JZ S2 CMP DL,2CH ;檢測(cè)字符是否為逗號(hào) 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)提示錯(cuò)誤信息 MOV AH,9 INT 21H

9、 LEA DX,NEW MOV AH,9 INT 21H JMP S1 JUDGE子模塊用來判斷所輸入的年份是否為閏年,先用轉(zhuǎn)換后的數(shù)值除以4,若不能整除,則肯定不是閏年,若可以整除則再用其除以100,若不能整除,則肯定是閏年,若能整除則說明不是閏年。最后用轉(zhuǎn)換后的數(shù)值除以400,若可以整除,則肯定是閏年,否則就不是閏年。其核心算法如下。 B1: POP AX MOV DX,0 MOV CX,AX ;將AX中的值暫存在CX中 MOV BX,4 DIV BX ;年份對(duì)應(yīng)的數(shù)值除以4 CMP DX,0 JNE NO MOV AX,CX MOV DX,0 MOV BX,100 ;年份對(duì)應(yīng)的數(shù)值除以1

10、00 DIV BX CMP DX,0 JNE YES MOV AX,CX MOV DX,0 MOV BX,400 ;年份對(duì)應(yīng)的數(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í)輸入數(shù)據(jù)可能是多個(gè)年份,因此需要循環(huán)檢測(cè)存儲(chǔ)區(qū)被轉(zhuǎn)換過的年份,當(dāng)檢測(cè)到為0時(shí)則退出JUDGE子程序。程序段如下LOP1: INC DI MOV DX,WORD PTR SI CMP DX

11、,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 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 程序調(diào)試4.1 運(yùn)行界面分析執(zhí)行程序后的初始界面如圖4-1所示。圖4-1輸入年份1000后執(zhí)行程序,界面如圖4-2所示。圖4-2此時(shí)按

12、下除Q和q的任意鍵可以繼續(xù)執(zhí)行程序,界面如圖4-3所示。圖4-3輸入年份1000,2000,12后再次執(zhí)行程序,界面如圖4-4所示。圖4-4按下除Q和q的任意鍵可以繼續(xù)執(zhí)行程序,若此時(shí)輸入的年份是輸入的是字母、符號(hào)等,系統(tǒng)會(huì)提示錯(cuò)誤并要求重新輸入,如輸入abcd時(shí)界面如圖4-5所示。圖4-5輸入了正確格式的年份后繼續(xù)執(zhí)行程序,然后按下Q或者q可以退出程序。4.2 調(diào)試過程及分析 在各個(gè)子程序編寫過程中,由于運(yùn)用較多循環(huán),導(dǎo)致目標(biāo)地址命名有些混亂,在匯編時(shí)出現(xiàn)語法類的錯(cuò)誤,還好此類錯(cuò)誤比較容易發(fā)現(xiàn)并及時(shí)做好更改。而在程序調(diào)試過程中,由于循環(huán)設(shè)置不當(dāng),導(dǎo)致數(shù)字字符串進(jìn)行轉(zhuǎn)換時(shí)溢出,造成判斷結(jié)果有誤

13、,有時(shí)還會(huì)出現(xiàn)無結(jié)果輸出狀態(tài)。此類錯(cuò)誤不屬于語法范疇,通常是算法編寫有些問題,導(dǎo)致程序運(yùn)行混亂,在這種情況下,我只好采用單步運(yùn)行程序,最后發(fā)現(xiàn)問題所在將轉(zhuǎn)換算法進(jìn)行修改,才得以恢復(fù)正常輸出。5 心得體會(huì)微機(jī)原理與接口技術(shù)這門課程在最初接觸時(shí),由于沒有找到有效的學(xué)習(xí)方法,面對(duì)較多的新名詞、新語言,導(dǎo)致學(xué)習(xí)效果不佳。后來細(xì)心學(xué)習(xí)之后,發(fā)現(xiàn)匯編語言與C語言的編程思想有很多類似之處,其指令形式雖然不一樣,但一些基本的語句結(jié)構(gòu)基本相同,如順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等。雖然匯編語言沒有C語言那么方便,但也能實(shí)現(xiàn)大部分的程序編寫功能。也是在細(xì)學(xué)之后,才發(fā)現(xiàn)匯編語言的強(qiáng)大功能,也真切體會(huì)到軟件相對(duì)硬件的優(yōu)越

14、之處。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,后悔平時(shí)學(xué)習(xí)中的眼高手低;同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。同時(shí)經(jīng)過這次課程設(shè)計(jì),我知道了平時(shí)要養(yǎng)成多查閱資料的好習(xí)慣,不要遇到不懂的就問別人,只有經(jīng)過自己的一番努力思考再與老師或同學(xué)討論,才能真正的學(xué)到知識(shí)。當(dāng)你拿到一個(gè)任務(wù)但卻無從下手時(shí),不妨將任務(wù)細(xì)分成若干小任務(wù),然后各個(gè)擊破,逐一拿下。也正是運(yùn)用這種思想,我把程序分成幾個(gè)子程序分別編寫,最后再匯總調(diào)試程序,當(dāng)發(fā)現(xiàn)問題時(shí),可以分別查看子程序進(jìn)行修改,方便快捷而且思路清晰,既方便自己程序的調(diào)試,又方便了閱讀者的理清我的編程思路

15、??偟膩碚f,通過這次課程設(shè)計(jì),我受益匪淺,掌握了一些匯編編程的經(jīng)驗(yàn)及小技巧,我想這些經(jīng)驗(yàn)在以后的學(xué)習(xí)和工作中都是用得著的。附錄 程序清單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

16、not leap year!','$' MESS DB 'If you want to quit please press .q/Q.' DB 0DH,0AH,'Press other 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 ;調(diào)用INPUT子模塊 CALL JUDGE ;調(diào)用JUDGE子

17、模塊 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 PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI S1: LEA DX,I ;輸入年份提示 MOV AH,9 INT 21H LEA DX,

18、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 ;輸入字符的ASCII值減去30H得到對(duì)應(yīng)的數(shù)值 CMP DL,0 ;數(shù)值小于0則系統(tǒng)提示錯(cuò)誤 JB ERROR1 CMP DL,9 ; 數(shù)值大于9則系統(tǒng)提示錯(cuò)誤 JA ERROR1 ADD AX,DX MOV DL,BYTE PTR BX+1 CMP DL,0DH JZ S2 CMP D

19、L,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)提示錯(cuò)誤信息 MOV AH,9 INT 21H LEA 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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論