微機(jī)原理軟件課程設(shè)計(jì)報(bào)告_第1頁
微機(jī)原理軟件課程設(shè)計(jì)報(bào)告_第2頁
微機(jī)原理軟件課程設(shè)計(jì)報(bào)告_第3頁
微機(jī)原理軟件課程設(shè)計(jì)報(bào)告_第4頁
微機(jī)原理軟件課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

電氣工程學(xué)院微機(jī)原理課程設(shè)計(jì)報(bào)告書課題名吃豆子程序和電子秒表班級_____________________姓名________________指導(dǎo)教師日期目錄一:軟件課程設(shè)計(jì)1.1、概要及關(guān)鍵詞11.2、課程設(shè)計(jì)題目11.3、設(shè)計(jì)思想簡述11.4、程序流程圖21.5、程序源代碼3-111.6、程序運(yùn)行過程121.7、軟件設(shè)計(jì)心得體會131.8、參考文獻(xiàn)13二:硬件課程設(shè)計(jì)2.1、硬件設(shè)計(jì)目的142.2、硬件設(shè)計(jì)內(nèi)容142.3、硬件設(shè)計(jì)要求142.4、硬件設(shè)計(jì)電路142.5、硬件程序代碼14-192.6、硬件系統(tǒng)調(diào)試情況192.7、課程設(shè)計(jì)心得與體會202.8、參考文獻(xiàn)20一:軟件課程設(shè)計(jì)吃豆子程序1.1摘要:本程序通過匯編語言來實(shí)現(xiàn)在屏幕上顯示多行“豆子”(用“.”表示)和“怪物”(用“3”表示),用一個(gè)“嘴巴”(用字符“C”表示),程序運(yùn)行時(shí),單擊Enter進(jìn)入游戲,通過方向鍵上下左右控制“嘴巴”的運(yùn)動方向,如果遇到豆子就吃掉如果遇到怪物則游戲結(jié)束,當(dāng)按Esc時(shí)游戲也會結(jié)束。這個(gè)程序是在Windows的平臺上的MASM進(jìn)行編譯的。此程序提供一個(gè)可視化游戲界面,通過鍵盤輸入相應(yīng)的操作后,便可以執(zhí)行整個(gè)游戲程序。通過本次匯編程序的設(shè)計(jì),使我進(jìn)一步熟練掌握了匯編程序中的一些相關(guān)命令的使用。講書本理論知識在現(xiàn)實(shí)中得到實(shí)際的應(yīng)用,幫助我進(jìn)一步的了解匯編語言編程的一些原理關(guān)鍵詞:數(shù)據(jù)段中斷子程序代碼段調(diào)用主程序1.2課程設(shè)計(jì)題目(分析)我選擇匯編語言與微機(jī)原理課程設(shè)計(jì)的題目是吃豆子程序。之所以選擇這個(gè)題目,是因?yàn)槲矣X得這個(gè)課程設(shè)計(jì)做出來會比較有意思,對于愛好游戲的廣大學(xué)生來說也有一定的實(shí)用價(jià)值;這個(gè)題目相對而言不是很簡單,它不但要運(yùn)用我們上課所學(xué)的知識,還涉及到許多課外的內(nèi)容。吃豆子程序設(shè)計(jì)題目要求:在屏幕上顯示多行“豆子”(用“.”表示),用一個(gè)“嘴巴”(用字符“C”表示),程序運(yùn)行時(shí),單擊空格,“嘴巴”開始從左到右逐行還是“吃豆子”,一直到“豆子”被吃完停止或者單擊空格暫停。為了使游戲更好玩更有意思,我們討論后將使程序通過匯編語言來實(shí)現(xiàn)在屏幕上顯示多行“豆子”(用“.”表示)和“怪物”(用“3”表示),用一個(gè)“嘴巴”(用字符“C”表示),程序運(yùn)行時(shí),單擊Enter進(jìn)入游戲,通過方向鍵上下左右控制“嘴巴”的運(yùn)動方向,如果遇到豆子就吃掉如果遇到怪物則游戲結(jié)束,當(dāng)按Esc時(shí)游戲也會結(jié)束。1.3設(shè)計(jì)思想簡述對于這個(gè)題目我的設(shè)計(jì)思想是:首先定義一個(gè)字符串,內(nèi)容為字符“C”的ASCⅡ值還有其他的一些相關(guān)信息,然后把屏幕中設(shè)置多行多列,在行和列中隨機(jī)放置豆子和怪物的位置,這就需要在編程一開始定義時(shí)就設(shè)置。進(jìn)入游戲后由方向鍵來控制“C”的移動位置,當(dāng)遇到豆子“.”時(shí)將其用空格代替使其消掉相當(dāng)于吃掉了。當(dāng)遇到怪物“3”時(shí)就跳出游戲,同樣如果在游戲過程中按Esc也會退出游戲。1.4程序框圖輸入界面提示開始 輸入界面提示開始輸入ENTER輸入ENTER進(jìn)入方向鍵判斷方向鍵判斷后退鍵左行鍵前進(jìn)鍵后退鍵左行鍵前進(jìn)鍵右行鍵所遇字符判斷所遇字符判斷遇怪物“3”遇怪物“3”遇空格鍵遇豆子“.”變?yōu)閁,調(diào)用延時(shí)變?yōu)镺,調(diào)用延時(shí)變?yōu)镺,調(diào)用延時(shí)調(diào)用延時(shí)循環(huán)運(yùn)行結(jié)束1.5源程序代碼MENUMACROOP1,OP2,OP3;菜單顯示宏定義MOVAH,2MOVBH,0MOVDH,OP1MOVDL,OP2INT10HMOVAH,9LEADX,OP3INT21HENDMSTACKSEGMENTSTACKDB200DUP(0)STACKENDSDATASEGMENTDISPLAY1DB'PRESSESCKEYTOEXIT$'MSGDB'GAMEISOVER!$'ARYDB'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'DB'0','.',0,0,'3',0,0,'3',0,0,'3','3','.',0,0,0,0,'0'DB'0',0,0,'3','.','3','.',0,0,0,0,0,0,0,0,0,0,'0'DB'0',0,0,'3',0,0,'3',0,0,'3','3','.',0,0,0,0,'3','0'DB'0','3',0,0,0,0,0,'3',0,0,0,0,0,0,0,'3','.','0'DB'0','3',0,0,0,'3',0,0,'3',0,0,0,0,0,'.','3',0,'0'DB'0','.',0,0,0,'3',0,0,'.',0,0,0,'3','3','3','3',0,'0'DB'0','3','3','3','3',0,0,'3',0,0,0,0,0,0,0,0,0,'0'DB'0','3',0,'.','3',0,0,'3',0,0,0,0,0,0,0,0,0,'0'DB'0',0,0,0,0,0,'3','3',0,'3','3','3','3','3',0,0,0,'0'DB'0',0,0,0,0,0,'.','3',0,'.','3','3','.',0,0,'3','3','0'DB'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'CUR_POSDB19DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAH,0;設(shè)置顯示方式MOVAL,2INT10HLOP0:MENU05,10,DISPLAY1;菜單信息的宏調(diào)用MOVAH,2;設(shè)定光標(biāo)位置MOVDH,24MOVDL,0INT10HMOVAH,0;鍵盤中斷調(diào)用INT16HCMPAL,0DH;如果按下Enter鍵,則進(jìn)入游戲JNELOP0CALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MON;顯示游戲界面MOVDH,6;設(shè)置光標(biāo)位置,顯示開始的字符'C'MOVDL,21MOVBH,0MOVAH,2INT10HMOVAL,'C'CALLCHAR_PLAYBEGIN:;游戲開始階段MOVAH,0;鍵盤終端調(diào)用,根據(jù)用戶輸入的命令游戲INT16HCMPAL,1BH;如果按下ESC鍵,結(jié)束游戲JZEXITCALLEATBEAN;吃豆子函數(shù)調(diào)用MOVAH,2;根據(jù)命令后的行列值設(shè)置光標(biāo)位置INT10HMOVAH,8;獲取當(dāng)前光標(biāo)位置字符,字符保存在AL中INT10HCMPAL,'.'JEXING_XING;如果是'.'CMPAL,'3';如果是怪物字符‘3’JEUUUJMPCCCXING_XING:MOVAL,'O';顯示字符'O'后延遲一段時(shí)間CALLCHAR_PLAYCALLDELAYJMPCCCUUU:MOVAL,'U';顯示字符'U'后結(jié)束游戲CALLCHAR_PLAYCALLDELAYJMPEXITCCC:MOVAL,'C'CALLCHAR_PLAYJMPBEGINEXIT:;退出MOVAH,2MOVDX,1200HINT10HMENU19,22,MSG;顯示游戲結(jié)束信息MOVAH,0;此處是為防止結(jié)束游戲后立即終止INT16HMOVAH,4CHINT21HDOU_MONPROC;界面顯示函數(shù)PUSHAXPUSHBXPUSHCXPUSHDXMOVBH,0MOVDH,5MOVDL,20MOVSI,0LOP1:MOVDL,20LOP2:MOVAH,2INT10HMOVAL,ARY[SI]CALLCHAR_DISPLAYINCSIINCDLCMPDL,38JNELOP2INCDHCMPDH,17JNELOP1JIESHU:POPDXPOPCXPOPBXPOPAXRETDOU_MONENDPDELAYPROCPUSHCXPUSHDXMOVDX,51000DL500:MOVCX,10000Dl10MS:LOOPDl10MSDECDXJNEDL500POPDXPOPCXRETDELAYENDPchar_displayproc;帶顏色顯示數(shù)組中字符的函數(shù)PUSHAXPUSHBXPUSHDXcmpal,'3'jnexingmovbl,4jmpgoxing:cmpal,'.'jnebaimovbl,2jmpgobai:movbl,7go:movah,9movcx,1int10hPOPDXPOPBXPOPAXretchar_displayendpEATBEANPROC;吃豆子函數(shù)LEADI,ARYADDDI,WORDPTRCUR_POS;用DI保存當(dāng)前光標(biāo)位置對應(yīng)的數(shù)組中字符的偏移地址CMPAH,4DH;按下右鍵JNZLEFTJMPPRLEFT:CMPAH,4BH;按下左鍵JNZUPJMPPLUP:CMPAH,48H;按下上鍵JNZDOWNJMPPUDOWN:CMPAH,50H;按下下鍵CALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MONJMPPDPR:INCDLCMPDL,37JNBBACK1PUSHCXMOVCL,CUR_POSADDCL,1MOVCUR_POS,CL;每向右移一步,當(dāng)前位置加1POPCXMOV[DI],BYTEPTR0;數(shù)組中該處字符用空格填充CALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MONJMPTUICHUBACK1:DECDLCALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MONJMPTUICHUPL:DECDLCMPDL,20JEBACK2PUSHCXMOVCL,CUR_POSSUBCL,1MOVCUR_POS,CL;每向左移一步,當(dāng)前位置減1POPCXMOV[DI],BYTEPTR0CALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MONJMPTUICHUBACK2:INCDLCALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MONJMPTUICHUPU:DECDHCMPDH,5JEBACK3PUSHCXMOVCL,CUR_POSSUBCL,18MOVCUR_POS,CLPOPCXMOV[DI],BYTEPTR0CALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MON;重新顯示屏幕JMPTUICHUBACK3:INCDHCALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MON;重新顯示屏幕JMPTUICHUPD:INCDHCMPDH,16JEBACK4PUSHCXMOVCL,CUR_POSADDCL,18MOVCUR_POS,CLPOPCXMOV[DI],BYTEPTR0CALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MON;重新顯示屏幕JMPTUICHUBACK4:DECDHCALLCLEAR_SCREEN;清屏調(diào)用CALLDOU_MON;重新顯示屏幕TUICHU:RETEATBEANENDPCLEAR_SCREENPROC;清屏函數(shù)定義PUSHAXPUSHBXPUSHCXPUSHDXMOVAH,6MOVAL,0MOVBH,7MOVCH,0MOVCL,0MOVDH,24MOVDL,79INT10HPOPDXPOPCXPOPBXPOPAXRETCLEAR_SCREENENDPCHAR_PLAYPROC;顯示知道顏色的字符函數(shù)MOVAH,9MOVBL,6MOVCX,1INT10HRETCHAR_PLAYENDPCODEENDSENDSTART1.6程序運(yùn)行過程1.編譯:*:在windowsxp系統(tǒng)下運(yùn)行MASM匯編軟件,編譯程序,無錯(cuò)誤與警告,執(zhí)行下一步。2.鏈接:3.執(zhí)行:(2)所遇到的主要問題和解決方法在課程設(shè)計(jì)的過程當(dāng)中遇到的主要問題就是對整個(gè)匯編知識不是很熟悉,部分代碼不能靈活運(yùn)用,也有部分代碼不能理解,因此在設(shè)計(jì)過程中花了較多時(shí)間查閱書籍跟瀏覽網(wǎng)上資料;在編寫完整個(gè)程序后,編譯、鏈接、運(yùn)行時(shí),當(dāng)用方向鍵來控制嘴巴時(shí)發(fā)現(xiàn)并沒有按順序吃豆子,重新檢查程序發(fā)現(xiàn)是由于吃豆子程序中位置運(yùn)算出現(xiàn)了錯(cuò)誤,通過調(diào)整程序中的“DI”(當(dāng)前光標(biāo)位置對應(yīng)的數(shù)組中字符的偏移地址)的值,最終解決了這個(gè)問題。再一個(gè)就是DOS指令不能靈活運(yùn)用,導(dǎo)致程序運(yùn)行過程中紕漏百出,這樣也浪費(fèi)了不少時(shí)間,最后通過多次嘗試修改,終于完成了整個(gè)程序設(shè)計(jì)。1.7課程設(shè)計(jì)的感想和心得體會。通過本次匯編語言課程設(shè)計(jì),讓我更加明白實(shí)踐的重要性,只有在實(shí)踐中才能更加理解各種指令的功能。再者,學(xué)習(xí)理論知識的目的還是要拿來運(yùn)用,通過實(shí)踐來鞏固所學(xué)的理論知識。并且通過這次課程設(shè)計(jì)實(shí)踐,讓我一改往日的厭學(xué)情緒,尤其是當(dāng)程序運(yùn)行正確的時(shí)候,那種來自內(nèi)心的成就感,讓我更加有信心學(xué)好匯編語言了。在這次的課程設(shè)計(jì)過程中遇到不懂得問題敢于向同學(xué)老師提問,在討論的過程中受益匪淺,更加加深了學(xué)習(xí)的主動性。如果遇到問題了還坐那里發(fā)呆,那肯定完成不了任務(wù)。在這個(gè)學(xué)習(xí)設(shè)計(jì)的過程中使我對于微機(jī)匯編這門課有了更深的理解!對于學(xué)習(xí)匯編語言這門專業(yè)課,以后要多看程序,多嘗試編寫程序,在實(shí)踐的過程中發(fā)現(xiàn)問題,并及時(shí)解決問題。1.8參考文獻(xiàn)[1]錢小捷等編.《微機(jī)原理與借口技術(shù)》,2008年1月,第4期第1版,機(jī)械工業(yè)出版社[2]宋彩莉等編.《匯編語言程序設(shè)計(jì)學(xué)習(xí)指導(dǎo)》,2007年出版,西安交通大學(xué)版[3]沈美明等編.《IBM-PC匯編語言程序設(shè)計(jì)》,2008年第1版,清華大學(xué)出版社[4]求伯君等編.《新編深入DOS編程》,1994年6月版,學(xué)苑出版社二:硬件課程設(shè)計(jì)電子秒表2.1硬件設(shè)計(jì)目的讓學(xué)生獨(dú)立或集體討論設(shè)計(jì)題目的總體設(shè)計(jì)方案、編程、軟件硬件調(diào)試、編寫設(shè)計(jì)報(bào)告等問題。通過本次課程設(shè)計(jì)使學(xué)生熟練掌握微機(jī)系統(tǒng)與接口擴(kuò)展電路的設(shè)計(jì)方法,熟練應(yīng)用8086匯編語言編寫應(yīng)用程序和實(shí)際設(shè)計(jì)中的硬軟件調(diào)試方法和步驟,熟悉微機(jī)系統(tǒng)的硬軟件開發(fā)工具的使用方法2.2硬件設(shè)計(jì)內(nèi)容電子秒表:設(shè)計(jì)一個(gè)可任意啟動/停止的電子秒表,要求用6位LED數(shù)碼顯示,計(jì)時(shí)單位為1/100秒。利用功能鍵進(jìn)行啟/??刂啤F涔δ転椋荷想姾笥?jì)時(shí)器清0,當(dāng)?shù)谝淮危ɑ蚱鏀?shù)次)按下啟/停鍵時(shí)開始計(jì)數(shù)。第2次(或偶數(shù)次)按下該鍵時(shí)停止計(jì)時(shí),再一次按啟/停鍵時(shí)清零后重新開始計(jì)時(shí)。利用8086類型2中斷(即外部引入不可屏蔽中斷),可用開關(guān)控制實(shí)現(xiàn):暫停,復(fù)位;清零;保存數(shù)據(jù)功能。2.3硬件設(shè)計(jì)要求同組同學(xué)要發(fā)揚(yáng)團(tuán)隊(duì)協(xié)作精神,積極主動的提出問題、解決問題、討論問題,互相幫助和啟發(fā)。在設(shè)計(jì)中可以引用所需的參考資料,避免重復(fù)工作,加快設(shè)計(jì)進(jìn)程,但必須和題目的要求相符合,保證設(shè)計(jì)的正確。在老師的指導(dǎo)下制定好自己各環(huán)節(jié)的詳細(xì)設(shè)計(jì)進(jìn)程計(jì)劃,按給定的時(shí)間計(jì)劃保質(zhì)保量的完成個(gè)階段的設(shè)計(jì)任務(wù)。設(shè)計(jì)中可邊設(shè)計(jì),邊修改,軟件設(shè)計(jì)與硬件設(shè)計(jì)可交替進(jìn)行,問題答疑與調(diào)試和方案修改相結(jié)合,提高設(shè)計(jì)的效率,保證按時(shí)完成設(shè)計(jì)工作并交出合格的設(shè)計(jì)報(bào)告。硬件設(shè)計(jì)電路2.5硬件程序代碼a1equ0000hb1equ0002hc1equ0004hctr1equ0006ha2equ0200hctr2equ0206ha3equ0100hdatasegmenttabdb3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71Hbufdb0,0,0,0buf1db0,0,0,0,0,0,0,0buf2db0,0;前為第一開關(guān)次數(shù)buf3db80dup(?)dataendscodesegment'code'assumeds:data,cs:codestart:movax,data movds,ax;中段入口地址設(shè)置 movax,0 moves,ax movdi,08 movax,offsetintr_key cld stosw movax,segintr_key stosw movax,datamoves,ax;8255寫入控制字moval,10001001bmovdx,ctr1outdx,aln3: calljishu jmpn3n2:leasi,buf2movbh,00hmovbl,1h[si] leadi,buf3 adddi,bx addbl,8 mov1h[si],blleasi,buf1 cld movcx,8 repmovsb n4: calldisjmpn4n5:leasi,buf2movbh,00hmovbl,1h[si] cmpbl,0 jzn1leadi,buf1 subbl,8 mov1h[si],bl leasi,buf3 addsi,bxcld movcx,8 repmovsbn6: calldis jmpn6n1:callqinlinjmpn1 ;jmpstart jishuprocnear;計(jì)數(shù)子程序leasi,bufmovbl,[si] cmpbl,100 jnzs6s1:movbl,0 mov[si],bl movah,1h[si] cmpah,59 jzs2 incah mov1h[si],ah jmps6 s2:movah,0 mov1h[si],ah movah,2h[si]cmpah,59 jzS4 incah mov2h[si],ah jmps6s4:movah,0 mov2h[si],ah movah,3h[si] cmpah,23 jzs6 incah mov3h[si],ahs6:callchu movcx,3 s5:calldisloops5 calldelay1s incbyteptr[si] retjishuendpchuproc ;rukoual ;數(shù)處理子程序 pushsi pushbx movbl,4 leadi,buf1 leasi,bufnext:lodsb movah,00 movcl,10divcl xchgah,alstosb moval,ah stosb decbl jnznext popbx popsi retchuendp disprocnear;顯示buf1中的值 pushbx pushcxleabx,tab leadi,buf1 movcx,8 movah,7Fhloop1:moval,[di] xlat movdx,a1 outdx,al movdx,b1 moval,ah outdx,al movbh,1 calldelay callqp leabx,tab rorah,1 incdi looploop1 popcx popbx retdisendpdelay1sprocnear;8253延時(shí)子程序 pushdx pushax movdx,ctr2;8253kongzimoval,00110000boutdx,almovdx,a2moval,01houtdx,almoval,00h outdx,al movdx,a3M1:inal,dx testal,01h jzM1 popax popdxretdelay1sendpqpprocnear;清頻子程序moval,0ffh movdx,b1 outdx,al retqpendpdelayPROCNEAR;內(nèi)部延時(shí)之程序PUSHbxPUSHCXwait0:MOVCX,06hwait1:LOOPwait1DECbhJNZwait0POPCXPOPbxRETdelayENDP intr_keyprocnear;中斷服務(wù)子程序callkeytestal,2h jzn1 testal,4h jzn5 leadi,buf2 movbh,[di] incbh mov[di],bh testbh,1h jnzn2 jmpn3 iret in

溫馨提示

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

最新文檔

評論

0/150

提交評論