微機原理課程設(shè)計_第1頁
微機原理課程設(shè)計_第2頁
微機原理課程設(shè)計_第3頁
微機原理課程設(shè)計_第4頁
微機原理課程設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

武漢理工大學(xué)《微機原理與接口技術(shù)》課程設(shè)計說明書III圖形變換程序設(shè)計1設(shè)計意義(1)鞏固和加深課堂所學(xué)知識。(2)

將課本上的理論知識和實際應(yīng)用有機的結(jié)合起來,培養(yǎng)同學(xué)們分析和解決實際問題的能力。(3)

通過對匯編語言程序代碼的閱讀、修改、設(shè)計,理解和掌握復(fù)雜的匯編語言應(yīng)用程序的編程,提高實踐編程能力。本程序要求按不同的鍵顯示不同的圖形,按“q”鍵退出。實質(zhì)上通過做這道題目可以檢查學(xué)生對匯編語言這門課程的基本知識的掌握程度。能用匯編語言熟練地運用順序、選擇、循環(huán)三大結(jié)構(gòu),進一步掌握各個指令的功能,特別是轉(zhuǎn)向指令,能夠讓我們熟悉并掌握DOS系統(tǒng)功能調(diào)方法;同時在程序設(shè)計過程中熟悉并掌握各種指令的應(yīng)用,知道編程的具體流程。

只有掌握匯編語言基本編程方法,掌握程序各部分功能及其相互聯(lián)系、相互作用,才能把程序?qū)懗鰜?,才能把程序?qū)懞谩?設(shè)計內(nèi)容2.1程序的內(nèi)容與要求掌握8086匯編語言程序設(shè)計方法,設(shè)計一個圖形變換顯示程序。程序運行后,鍵盤輸入不同進行不同處理:(1)輸入‘Q’,顯示‘ThankYou!’并結(jié)束程序;(2)輸入‘E’,顯示一個用不同顏色填充且?guī)в羞吙虻木匦螆D案;輸入‘F’,顯示一個用不同顏色填充的圓形圖案。2.2程序運行條件 本程序可在DOS,windows98或DOS模擬器上運行。所需要工具軟件為MASM5.0及以上版本。3方案設(shè)計3.1設(shè)計思路3.1.1顯示字符程序顯示“ThankYou”程序是最易于設(shè)計的一部分,只需要定義其字符串為字節(jié)型變量,并定義在當鍵盤輸人為‘Q’時顯示,并退出運行即3.1.2顯示圓形首先,定義x為豎線的列值,Y1和Y2分別為豎線的兩端點的行值,并將界面分成LEFT和RIGHT兩部分。在LEFT部分,輸入值為列數(shù)A,給圓的半徑R賦具體值,通過算法完成下式求得A對應(yīng)的行值,從而確定Y2,再利用中間變量實現(xiàn)Y1與Y2的等值,即可畫出LEFT部分的一條弦。再用宏定義,使A值從0到R,完成弦在0到R上的積分,就形成左半部分的半圓,同理,可完成右半部分的半圓,兩個半圓整合,便形成圓。圖3-1定義弦圖3-2計算圓上點的坐標3.1.3顯示矩形先確定一點,定義為矩形左上角的列號和行號,即確定了矩形的一個角點坐標,再定義其長度和寬度并賦值,知道左上角角點坐標及矩形長寬,即可畫出矩形。邊框的設(shè)計實際是大小兩個矩形的重疊形成的,定義第二個矩形時,其角點及長寬比之前的尺寸少有增加,酌情而定,設(shè)置輸出時,底層顯示尺寸較大的矩形,上層顯示尺寸較小的矩形,使得上層矩形顯示完整,下層矩形顯示多出來的部分,即形成邊框,并在輸出顏色是設(shè)置兩個舉行的色差,從而明顯顯示出邊框。3.2程序流程圖程序流程圖如圖3-3所示圖3-3程序流程圖4程序分解4.1字符顯示程序在設(shè)計思路中已經(jīng)提到,顯示字符的程序較為簡單,只需用字節(jié)型變量定義字符串,并定義在接收‘Q’是顯示,并退出運行即可。DB0DH,0AH,'Q:display"ThankYou!"andquittoDOS.',0DH,0AHMSGQDB0DH,0AH,'ThankYou!','$'4.2圓形顯示程序(1)利用弦的積分方法,定義宏:LINEMACROX,Y1,Y2 ;畫列值為x,行值從Y1到Y(jié)2的直線LOCALLL,FIRSTMOVAAAAAMOVAAAAAMOVAAAAAMOVAAAAAJMPAAAAALL:INCAAAAA ;行值加1FIRST:MOVAAAAAINT10H CMPDX,Y2JNZLL ;判斷Y1和Y2是否相等,若相等則完成ENDM(2)定義坐標:CIRCLEMACROMOVA,0 ;初始化圓的橫坐標AGA:CALLAAA ;計算縱坐標的值MOVAAAMOVCL,AADDCX,X0MOVAAA ;右平面弦的列值MOVAAAMOVCL,ANEGCXADDCX,X0 MOVAAA MOVAAA ADDAAAMOVAAA ;弦的上端點的行值MOVAAANEGAAAADDAAA MOVAAA ;弦的下端點的行值LINEAAA LINERIGHT,DOWN,UP ;在右平面畫弦INCA MOVAL,R計算縱坐標的子程序:SQRTPROCNEAR;計算行坐標MOVMULMOVMOVMULSUBMOVCX,0LAST1:MOVDXINCDSUBAXJCEINCCJMPLEXIT1:MOVH,CX ;計算結(jié)果保存在H單元內(nèi)RETSQRTENDP4.3矩形程序顯示產(chǎn)生矩形的子程序:RECTANGLEPROCNEARPUSH??PUSH??PUSH??PUSH??PUSH??MOVD??;矩形左上角行號MOVCX??MOVAL,??MOVDI??;矩形的長ADDDI,CXMOVSI,??TWID;矩形的寬ADDSI,DXHLINE:MOVC??MNHAGAIN:MOVAHVMOV??INT??INCCXCMP??;是否達到矩形的長?JLHA??ADDDX,1CMPD??EPOP??POP??POP??XPOPD??POPAXRETRECTANGLEENDP4.4產(chǎn)生顏色的子程序RANDOMCOLOR??OCNEARPUSH??PUSHBXPUSH??XRANDCOLOR:INAL,40HCMPA??JA??OLORMOVV??,ALPOP??POPBXPOPAXRETRANDOMCOLORENDP4.5屏幕初始化子程序CLSMENUPROCNEARMOV??;設(shè)置屏幕顯示方式MOV?? ;定義成640*48016色圖形模式INT10H LEAB??;顯示菜單MOVAH,13HMOVAL,01MOVC??MOV??MOVBH,0MOV??INT??RETCLSMENUENDP5運行結(jié)果顯示5.1矩形輸出顯示輸入‘E’,矩形輸出顯示如圖5-1所示圖5-1(a)矩形輸出顯示程序圖5-1(b)矩形輸出顯示程序5.2圓形輸出顯示輸入‘F’,圓形輸出顯示如圖5-2所示圖5-2(a)圓形輸出顯示圖5-2(b)圓形輸出顯示5.3字符串輸出顯示輸入‘Q’,字符串輸出顯示如圖5-3所示5-3字符串輸出顯示6設(shè)計過程中的問題在設(shè)計過程中出現(xiàn)的最大問題,就是開始按‘E’后正常顯示矩形,再按‘F’后,在顯示圓的同時,還會顯示矩形,矩形在底層,再按‘E’,在顯示矩形的同時還會顯示圓形,且圓形在底層,運行結(jié)果如圖6-1所示。圖6-1(a)錯誤運行結(jié)果圖6-1(b)錯誤運行結(jié)果經(jīng)分析,出現(xiàn)該問題的原因是沒有清屏,導(dǎo)致按下一個鍵,顯示下一個圖形的時候,上一個圖形依舊不會消失,找到了問題所在,之前是由于在設(shè)置輸出時,僅在第一次輸出矩形之前屏幕初始化。修改后,定義屏幕初始化的子程序,在輸出矩形和圓形事,都先有調(diào)用清屏的子程序這一步,是的錯誤得以糾正,屏幕初始化子程序的調(diào)用如下:CALLCLSMENU ;屏幕初始化并顯示菜單CALLRAN??????;隨機產(chǎn)生顏色CALL??;畫外框矩形CALLCLSMENU ;屏幕初始化并顯示菜單CALLRANDOMCOLOR ;隨機產(chǎn)生顏色MOV??CIRCLE ;在屏幕上畫出半徑為R的圓心得體會本次課程設(shè)計題目是圖形變換程序設(shè)計。初次看到題目,沒有任何的思路,情急之下,心神不定地查了一整天的資料,也沒有太大的收獲。自己完全局限于課本上所學(xué)的簡單的語言,但那遠不足以完成本次課設(shè)的任務(wù)。最后,我決定通過查閱參考資料,并上網(wǎng)查詢各種代碼的含義,自己設(shè)計畫圖的算法,實現(xiàn)圖形的顯示。在整個過程中,圓的畫法是最不易的。開始參考了別人畫圓軌跡線,從中得到了啟示,做圓上弦的積分由線及面,形成圓面。這次課程設(shè)計對我而言,其難度是之前從未有過的。然而,我還是靠自己的毅力挺了過來。在查閱了大量資料后,掌握了簡單圖形顯示的程序,熟悉了子程序的調(diào)用和doc功能的實現(xiàn),并初步學(xué)會了中斷在程序中的應(yīng)用。兩周的匯編語言課程設(shè)計結(jié)束了,我的收獲是很大的。通過課程設(shè)計的編程和對編程過程中遇到的問題的思考,有效的提高了我對匯編的認識和理解,切實提高了我的編程能力,補全了我的不足。值得慶幸的是,這次課程設(shè)計,自己是獨立完成的,并未參考他人方案。雖然并未有很多設(shè)計上創(chuàng)新的地方,但對我來說,這是一種突破,自己獨立解決問題的能力進一步提高。在今后的課程設(shè)計中,我依舊要保持這種獨立思考的習(xí)慣,將自己的短處變?yōu)殚L處。致謝我本次的課程設(shè)計是在??老師老師親切關(guān)懷與細心指導(dǎo)下完成的。從題目的選擇到設(shè)計的最終完成,??老師始終都給予了我細心的指導(dǎo)和不懈的支持,并且在耐心指導(dǎo)之余,?????老師仍不忘關(guān)心我們的生活,冷冷寒冬的關(guān)懷讓我們倍感溫暖。值得一提的是,????老師宅心仁厚,閑靜少言,不慕榮利,對學(xué)生認真負責(zé),在他身上,我們可以感受到一個學(xué)者的嚴謹和務(wù)實,這些都讓我們獲益菲淺,并且將終生受用無窮。畢竟“經(jīng)師易得,人師難求”,希望借此機會向???老師表示最衷心的感謝!參考文獻【1】彭虎周佩玲付忠謙.《微機原理與接口技術(shù)》(第二版)電子工業(yè)出版社2008.3【2】張凡.《微機原理與接口技術(shù)》(第二版)清華大學(xué)出版社2010.9【3】朱定華.《微機原理、匯編與接口技術(shù)》清華大學(xué)出版社1010.1【4】牟琦聶建萍.《微機原理與接口技術(shù)》清華大學(xué)出版社1007.12【5】吳葉蘭.《微機原理與接口技術(shù)》機械工業(yè)出版社2009.8附錄;;宏功能:畫一條豎線;啞元意義:x為豎線的列值;Y1和Y2分別為豎線的兩端點的行值;LINEMACROX,Y1,Y2 ;畫列值為x,行值從Y1到Y(jié)2的直線LOCALLL,FIRSTMOV??MOV?/???MOV/???MOVD/???JMP/???LL:INC/??? ;行值加1FIRST:MOV/???INT10H ;寫一個像素點CMP/???JNZLL ;判斷Y1和Y2是否相等,若相等則完成ENDM;;宏功能:通過分別在左右平面畫垂直于x軸的弦來畫一個實心圓;CIRCLEMACROMOV/??? ;初始化圓的橫坐標AGA:CALL/??? ;計算縱坐標的值MOV/???MOV/???ADD/??? ;右平面弦的列值MOVCH,0MOV/???NEGVADDC/??? MOV/??? ;左平面弦的列值MOVDX,H ADD/???MOVV/???NEGDXADD/??? MOV/??? ;弦的下端點的行值LINELEFT,V/??? ;在左平面畫弦LINE/??? ;在右平面畫弦INCA ;繼續(xù)畫其他弦至畫出圓MOVAL,RCMP/???JNZ/???ENDM;**********************************************************************DATASEGMENTMENUDB0DH,0AH,'Pleasepressakey:',0DH,0AHDB0DH,0AH,'E:showarectangle.'DB0DH,0AH,'F:showacircle.'DB0DH,0AH,'Q:display"ThankYou!"andquittoDOS.',0DH,0AHMENULENEQU$-MENUMSGQDB0DH,0AH,'ThankYou!','$'ROW/???COLUMN/???RECTLENDW/???RECTWIDDWVCOLORDB/???RDB?/???DB? ;存放圓的橫坐標A2DW/???HDW/??? ;存放圓的縱坐標Y0EQU/??? ;縱坐標的行值X0EQU/??? ;橫坐標的列值RIGHTDW? ;存放右平面的列值LEFTDW? ;存放左平面的列值UPDW? ;存放上半平面的行值DOWNDW? ;存放下半平面的行值DATAENDS;**********************************************************************CODESEGMENTASSUMEDS:DATA,CS:CODE,ES:DATA;START:MOVA/???MOV/???MOV/???;CALLCLSMENU ;屏幕初始化并顯示菜單WAITPRESS: ;等待按鍵MOV/??? ;接受命令I(lǐng)NT1/???ORA/??? ;轉(zhuǎn)換成小寫字母CMPAL,'e'JZDRAWRECTCMPAL/???CMPA/???JZQuitProcJMPW/???DRAWRECT:CALLCLSMENU ;屏幕初始化并顯示菜單CALLR/??? ;隨機產(chǎn)生顏色CALLRECTANGLE ;畫外框矩形PUSHV/???/???PUS/???PUSHRECTLENDDROW,8ADD/???SUB/???S/???ADDCOLOR,8CALLR/??? ;畫內(nèi)部矩形POPREC/???POPR/???POPROWJMPV/???SDRAWCIRC:CALLCLV/??? ;屏幕初始化并顯示菜單CALL/??? ;隨機產(chǎn)生顏色MOV/???CIRCLE ;在屏幕上畫出半徑為R的圓JMP/???QuitProc:MOVAL,03MOVAH,0INT/???MOVDX,OFFSETMSGQ ;顯示信息MOV/???INT21HMOV/??? ;返回DOSINT21H;;產(chǎn)生矩形子程序RECTANGLEPROC/???PUSHAXPUSH/???PUSHCXPUSH/???PUSH/???MOVDX,ROW;矩形左上角行號MOV/???;矩形左上角列號MOV/???MOV/???;矩形的長ADDDI,CXMOV/???;矩形的寬ADDSI/???HLINE:MOV/???HAGAIN:MOVAH/???;寫像素MOV/???INT/???INC/???CMP/???;是否達到矩形的長?JL/???ADD/???CMP/???;是否達到矩形的寬?JL/???EPOPSI/???DIPOP/???POP/???RETRECTANGLEENDP;;計算縱坐標的值輔助畫圓子程序SQRTPROC/???;計算行坐標MOVA/???MUL/???MOV/???MOV/???MUL/???SUBA/???MOVCX,0LAST1:MOV/???ADD/???INCDXSUB/???JCEXIT1INCCXJMP/???EXIT1:MOV/??? ;計算結(jié)果保存在H單元內(nèi)RETSQRTENDP;;隨機產(chǎn)生顏色子程序RANDOMCOLORPROCNEARPUSH/???PUSHBXPUSH/???RANDCOLOR:IN/???CMP/???JA

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論