匯編語言編寫動畫心的詳細報告_第1頁
匯編語言編寫動畫心的詳細報告_第2頁
匯編語言編寫動畫心的詳細報告_第3頁
匯編語言編寫動畫心的詳細報告_第4頁
匯編語言編寫動畫心的詳細報告_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

課程設計說明書NO.一、課程設計的目的及內容匯編語言與計算機系統(tǒng)組成是一項實用性很強的技術,只有進行實際操作,將理論應用于實際中,才能確實掌握書中的知識點。通過設計開發(fā)匯編軟件,不僅可以加深學生對匯編程序基本概念的了解,鞏固學習成果;還能夠提高實際動手能力及對計算機硬件的了解,掌握計算機軟件與硬件之間的聯(lián)系。為學生后續(xù)課程的學習,打下良好的基礎。同時匯編課程設計也是計算機科學與技術專業(yè)的基礎選修課的實踐環(huán)節(jié)。本課程設計的主要目的是掌握匯編程序設計的基本方法,并掌握程序設計中常見的錯誤的排除和避免。提供一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結合起來,鍛煉分析解決實際問題的能力,從而進一步提高了實際運用的能力。二、開發(fā)壞境1.硬件環(huán)境普通pc機2.軟件環(huán)境(1)使用編輯軟件TE.EXE進行源程序的編寫。(2)使用匯編軟件MASM.EXE對源程序匯編。(3)使用連接軟件LINK.EXE對目標文件進行連接。(4)使用調試軟件DEBUG.EXE對可執(zhí)行程序進行調試。(5)DOS系統(tǒng)三、功能分析1.需求分析1.1.設計內容設計一彩色動畫的程序,一個顏色方框從四周向中間由大變小,并留下痕跡,中心位置出現(xiàn)一顆紅“心”。1.2.設計要求(1)按任意鍵進入圖形顯示;(2)按空格鍵重復出現(xiàn)“心”;(3)按回車鍵將重復整個圖形;(4)q鍵退出程序。1.3.設計思路本程序主要是利用BIOS功能調用的10H中斷類型實現(xiàn)的。利用其12號功能,設置像素點的顏色、坐標和個數(shù),從而畫出圖形需要的線段,如畫方框、畫斜線、畫水平垂直線,以及采用行、列坐標連續(xù)寫像素的方法填充圖形等。畫完圖形之后延時,清屏。同時,利用dos功能調用的08號功能,從鍵盤輸入字符。如果是任意鍵,則進入圖形顯示;如果是回車鍵,則重新顯示這個圖形;如果是空格鍵,則改變“心”的大小;如果是“q”鍵,則退出。該系統(tǒng)只是簡單的運用字符進行設計組成相應的圖像,運用masm編程工具、link連接程序在debug環(huán)境下進行調試而成。在系統(tǒng)中界面中,首先是按下任意鍵進入動畫心界面。然后會按Q鍵退出的提示信息,其中包含2個隱藏信息:按空格鍵刷新心型圖案,來實現(xiàn)動態(tài)心;按其余鍵是重復動畫心的顯示。其中主要運用的指令有:push(壓入堆棧);Pop(從堆棧中釋放首地址的內容);sub(減法指令);add(加法指令);mov(傳送指令);call(過程調用指令);lea(地址傳送指令);inc(加一指令);cmp(比較指令);jmp(跳轉指令);jnz(條件跳轉指令)。2.詳細設計2.1主程序設計先設置圖形顯示方式為320*200彩色圖形方式、背景色為藍色和設置彩色組,再利用其12號功能,設置像素點的顏色、坐標和個數(shù),從而畫出圖形需要的線段,如畫方框、畫斜線、畫水平垂直線,以及采用行、列坐標連續(xù)寫像素的方法填充圖形等。畫完圖形之后延時,清屏。同時,利用dos功能調用的08號功能,從鍵盤輸入字符。如果是任意鍵,則進入圖形顯示;如果是回車鍵,則重新顯示這個圖形;如果是空格鍵,則改變“心”的大?。蝗绻恰皅”鍵,則退出。在編寫主程序時遇到了一些問題,我們在運行時發(fā)現(xiàn)了錯誤,后來發(fā)現(xiàn)在調用dos的08號功能時時出現(xiàn)了錯誤,通過查看資料發(fā)現(xiàn)在調用dos的08號功能時應該在AL中存放輸入字符的ASCII碼,而我們直接輸入的字符。在畫方框、對角線、任意水平線時先是設置cx,bx,dx各個寄存器賦予不同的初值,但我們在開始的時候沒有把初值設置好,結果造成了程序的出錯,后來經過調整才保證了程序的正常運行。為了方便了解系統(tǒng)的操作過程,特畫出改程序的系統(tǒng)流程圖。動畫心的主程序流程圖見圖1。設置顯示方式開始設置顯示方式開始結束設置背景色,彩色調板顯示提示信息從鍵盤輸入任意字符清屏從小到大畫方框延時畫十字線任意水平垂直線畫心延時從鍵盤輸入字符(al)=回車鍵?(al)=空格鍵?(al)=q從復出現(xiàn)心NoYesYesYesNoNo圖1動畫心的主程序流程圖2.2圖形顯示設計由程序要實現(xiàn)的顯示效果可見,程序中要引入多種圖案,具體由方框、對角線、任意水平垂直線、“心”等來形成整個圖案。所以要在程序中出現(xiàn)多次各種圖案來填充整個圖形。(1)畫方框進入顯示動畫心的界面時,首先出現(xiàn)的是方框。采用了mov,sub,inc,cmp,jnz等指令進行了定義,來顯示出方框的逐步顯示。先是設置cx,dx,bx各個寄存器不同的初值,即設置像素點的顏色、坐標和個數(shù),接著由大到小畫方框,每畫一個方框之前,各個寄存器都要設置不同的初值。(2)畫對角線和畫方框差不多,每畫一條對角線之前各個寄存器也要設置不同的初值。(3)畫任意水平垂直線畫十字線之前,各個寄存器如cx,bx,dx也需要設定不同的初值。(4)由大到小畫方框由程序要顯示的效果來分析,還需要再一次引入大大小小的方框,故還需要再一次由大到小畫方框。(5)填充輔助圖形畫好以后,需要采用行、列坐標連續(xù)寫像素的方法來填充圖形,達到統(tǒng)一合成的效果。(6)畫心由程序顯示的效果來看,最關鍵的就是畫心這個主要的圖形了。3.子程序的設計3.1延時子程序先pushcx,dx,即先讓cx,dx進棧,接著設置dx寄存器的初值為25,利用其12號功能設置cx的初值為2801,利用其13號功能使之循環(huán)。在進行循環(huán)次數(shù)計數(shù)(即dx→dx-1)后,判斷循環(huán)是否結束:如(dx)≠0,繼續(xù)循環(huán),轉移到目標地址d12所在的指令,否則順序執(zhí)行。然后dx,cx順序出棧。最后返回。在編寫延時子程序時,由于我沒有壓棧dx和cx,沒有把外循環(huán)和內循環(huán)設置好,在運行程序時出現(xiàn)了錯誤,后來我對dx和cx進行壓棧,把循環(huán)次數(shù)和循環(huán)語句設置好了,才把延時子程序編寫好。為了更好的了解延時子程序,我畫了延時子程序的流程圖見圖2。保護現(xiàn)場保護現(xiàn)場外循環(huán)內循環(huán)cx是否為零dx是否為零恢復現(xiàn)場結束NoNoYesYes圖2延時子程序流程圖3.2清屏子程序先設置功能號al及寄存器bx,cx,dx的初值,接著進入line循環(huán)程序。在line循環(huán)程序中,先清除緩沖區(qū)并請求指定的輸入功能,接著利用BIOS功能調用的10H中斷類型實現(xiàn)顯示器輸出控制。在進行循環(huán)次數(shù)計數(shù)(即cx→cx+1)后,判斷循環(huán)是否結束:如(cx)≠320,則繼續(xù)循環(huán),轉移到目標地址line所在的指令,否則再設置寄存器cx的初值,在進行循環(huán)次數(shù)計數(shù)(dx←dx+1)后,判斷循環(huán)是否結束:如(dx)≠200,則繼續(xù)循環(huán),轉移到目標地址line所在的指令,否則順序執(zhí)行。最后返回。在編寫清屏子程序時遇到的最大困難就是編寫line循環(huán)程序了,我沒有把該循環(huán)程序的循環(huán)次數(shù)設置正確,后來經過一點點的改正才編寫正確,(cx)≠320繼續(xù)循環(huán),轉移到目標地址line所在的指令,否則再設置寄存器cx的初值,在進行循環(huán)次數(shù)計數(shù)(dx←dx+1)后,判斷循環(huán)是否結束。為了更好的了解清屏子程序,我畫了該程序的流程圖見圖3。設置功能號al及寄存器bx、cx、dx的初值設置功能號al及寄存器bx、cx、dx的初值Line循環(huán)程序清除緩沖區(qū)并請求指定的輸入功能進行循環(huán)次數(shù)計數(shù)是否正確返回利用BIOS功能調用的10H中斷類型實現(xiàn)顯示器輸出控制NoYes圖3清平子程序流程圖四、調試與運行4.1調試(1)調用debugxin.exe命令,然后出現(xiàn)一短橫,在短橫后輸入u命令,將內存中的內容轉換為匯編語句,然后再語句中尋找斷點,我找的是本程序的清平子程序的匯編語句,然后g命令執(zhí)行清屏子程序的偏移地址05AB到05CC,執(zhí)行結果見圖4。圖4斷點設置結果圖(2)調用debugxin.exe命令,然后出現(xiàn)一短橫,在短橫后輸入u命令,將內存中的內容轉換為匯編語句,然后再語句中尋找斷點,我找的是本程序的畫心形的匯編語句,然后g命令執(zhí)行清屏子程序的偏移地址03F4到059B,執(zhí)行結果見圖5。圖5斷點設置結果4.2運行結果用編輯器輸入編好的程序源代碼轉換成目標文件,再將目標文件連接生成可執(zhí)行文件并運行該程序,得出程序運行結果。動畫心畫圖程序運行的開始界面見圖6圖6開始界面運行編好后的程序,屏幕背景色為藍色,先顯示“Welcomeyoutorunthisprogram!”“*****pleasepressanykey*****”的提示信息;按任意鍵后,出現(xiàn)“Myheartbestswithyours!”“*****pleasepressqtoquit*****”的文本信息;然后出現(xiàn)方框連續(xù)的由大變小,并留下痕跡,再出現(xiàn)一個心;按空格鍵重復出現(xiàn)心,任意鍵重復整個動畫,其完整動畫心圖見圖7。圖7完整動畫心圖五、總結在做本次課程設計中,我們查了大量的資料。為了讓我們的設計更加完善,我們也遇到了一些問題,在設計一些子程序的時候遇到了一些困難,在編寫延時子程序時,由于我沒有壓棧dx和cx,沒有把外循環(huán)和內循環(huán)設置好,在運行程序時出現(xiàn)了錯誤,后來我對dx和cx進行壓棧,把循環(huán)次數(shù)和循環(huán)語句設置好了,才把延時子程序編寫好,在編寫清屏子程序時遇到的最大困難就是編寫line循環(huán)程序了,我沒有把該循環(huán)程序的循環(huán)次數(shù)設置正確,后來經過一點點的改正才編寫正確,(cx)≠320繼續(xù)循環(huán),轉移到目標地址line所在的指令,否則再設置寄存器cx的初值,在進行循環(huán)次數(shù)計數(shù)(dx←dx+1)后,判斷循環(huán)是否結束。同時在編寫主程序時也遇到了一些問題,我們在運行時發(fā)現(xiàn)了錯誤,后來發(fā)現(xiàn)在調用dos的08號功能時時出現(xiàn)了錯誤,通過查看資料發(fā)現(xiàn)在調用dos的08號功能時應該在AL中存放輸入字符的ASCII碼,而我們直接輸入的字符。在畫方框、對角線、任意水平線時先是設置cx,bx,dx各個寄存器賦予不同的初值,但我們在開始的時候沒有把初值設置好,結果造成了程序的出錯,后來經過調整才保證了程序的正常運行。經過一周時間的實訓,不僅讓我把所學的理論知識與實踐相結合起來,也提高了我們的實際動手能力和獨立思考能力,雖然我們花了許多時間,但我相信我們得到的也會很多。六、參考文獻[1]齊志儒,高福祥.匯編語言程序設計[M],第4版.沈陽:東北大學出版社,2008.1[2]沈美明,溫冬嬋.IBM-PC匯編語言程序設計[M],第3版.北京:清華大學出版社,2007.7[3]李心廣,匯編語言與計算機系統(tǒng)組成[M],第1版.北京:機械工業(yè)出版社,2010.1[4]馬瑞芳,匯編語言程序設計[M],第一版.西安:西北工業(yè)大學出版社,2002.3[5]鄭初華,匯編語言、微機原理及接口技術[M],第三版.北京:電子工業(yè)出版社出版社,2010.6七、源程序代碼datasegmentfulldb0buff1db'Welcomeyoutorunthisprogramme!'db''db'*****Pleasepressanykey*****$'buff2db'Myheartbeatswithyours!'db'*****Pleaseqtoquit*****$'dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,axmovah,00moval,04int10hmovah,0bhmovbh,00movbl,1int10hmovah,0bhmovbh,1movbl,2int10hmovdx,offsetbuff1;顯示提示信息movah,09int21hmovah,08int21hcallclear;clssss:calltext;displaythetextmovdi,2moval,1;drawthebigboxmovcx,70movdx,20movbx,160callboxmovcx,71movdx,21movbx,158again:moval,1movdi,0callboxcalldelaymoval,0movdi,0callboxinccxincdxsubbx,2cmpcx,94jnzagainmovdi,0;drawthe2ndboxmovcx,95movdx,45moval,1movbx,110callboxmovcx,96movdx,46movbx,108again_00:moval,1movdi,0callboxcalldelaycalldelaymoval,0movdi,0callboxinccxincdxsubbx,2cmpcx,114jnzagain_00movcx,115;drawthe3rdboxmovdx,65moval,1movbx,70callboxmovcx,116movdx,66movbx,68again_01:moval,1movdi,0callboxcalldelaycalldelaymoval,0movdi,0callboxinccxincdxsubbx,2cmpcx,129jnzagain_01movdi,2moval,1;drawthesmallboxmovcx,130movdx,80movbx,40callboxmovdi,2moval,3;對角線movsi,0movcx,71movdx,21movbx,59callxie_linemovcx,171movdx,121movbx,59callxie_linemovsi,1movcx,71movdx,179movbx,59callxie_linemovcx,171movdx,79movbx,59callxie_linemovcx,150;十字線movdx,20movsi,0movbx,60calldraw_linemovcx,150movdx,120movbx,60calldraw_linemovcx,70movdx,100movsi,1movbx,60calldraw_linemovcx,170movdx,100movbx,60calldraw_linemovsi,1movcx,70movdx,60movbx,60callmid_linemovcx,170movdx,110movbx,60callmid_linemovsi,2movcx,110movdx,20movbx,30callmid_linemovcx,160movdx,120movbx,30callmid_linemovsi,3movcx,70movdx,140movbx,60callmid_linemovcx,170movdx,90movbx,60callmid_linemovsi,4movcx,110movdx,180movbx,30callmid_linemovcx,160movdx,80movbx,30callmid_linemovdi,0moval,1;drawthebigboxagainmovcx,70movdx,20movbx,160callboxmovdi,0moval,1;drawthesmallboxagainmovcx,130movdx,80movbx,40callboxmovdi,0movcx,95movdx,45moval,1movbx,110callboxmovcx,115movdx,65moval,1movbx,70callboxmovdi,1;fillcallfillcallfill_2callfill_3movcx,149;boldmovdx,120moval,2movbx,60movsi,0calldraw_linemovcx,151movdx,120moval,2movbx,60movsi,0calldraw_lineheart_:;drawtheheartcallcls_boxcallheartmovah,08int21hcmpal,'q'jzokcmpal,20hjzheart_callclearjmpsssok:retmainendpfillprocnear;theprocedureoffillmovfull,0moval,5movcx,160movdx,121movsi,0movbx,60fill_Y:pushcxpushdxpushbxcalldraw_linepopbxpopdxpopcxsubbx,2inccxadddx,2incfullcmpfull,30jnefill_yretfillendpfill_2procnearmovfull,0moval,5movcx,140movdx,121movsi,0movbx,60fill_Y1:pushcxpushdxpushbxcalldraw_linepopbxpopdxpopcxsubbx,2deccxadddx,2incfullcmpfull,30jnefill_y1retfill_2endpfill_3procnearmoval,1movfull,0movsi,0movcx,140movdx,121movbx,60re_fill:pushbxpushcxpushdxcalldraw_linepopdxpopcxpopbxinccxincfullcmpfull,9jnere_fillmovfull,0movcx,159movdx,121movbx,60re_fill2:pushbxpushcxpushdxcalldraw_linepopdxpopcxpopbxdeccxincfullcmpfull,9jnere_fill2retfill_3endpdraw_Lineprocnear;theprocedureofdrawalinepushbxcmpsi,0jzV_line1addbx,cxH_line:movah,0chint10hcmpdi,0jzaa0cmpdi,1jzaa1calldelayaa1:calldelayaa0:inccxcmpcx,bxjneH_linejmpexit_lineV_line1:addbx,dxV_line:movah,0chcmpdi,0jzbb0cmpdi,1jzbb1calldelaybb1:calldelaybb0:int10hincdxcmpdx,bxjneV_lineexit_line:popbxretdraw_Lineendpxie_lineprocnear;theprocedureofdrawaxie_lineaddbx,cxcmpsi,1jzxieline_1xieline_0:movah,0chint10hincdxinccxcmpcx,bxjnexieline_0jmpexit_xiexieline_1:movah,0chint10hdecdxinccxcmpcx,bxjnexieline_1exit_xie:retxie_lineendpMid_lineprocnear;drawaxie_lineaddbx,cxcmpsi,2jzmidline_2cmpsi,3jzmidline_3cmpsi,4jzmidline_4midline_1:movah,0chint10hincdxaddcx,2cmpcx,bxjnemidline_1jmpexit_linesmidline_2:movah,0chint10hadddx,2inccxcmpcx,bxjnemidline_2jmpexit_linesmidline_3:movah,0chint10hdecdxaddcx,2cmpcx,bxjnemidline_3jmpexit_linesmidline_4:movah,0chint10hsubdx,2inccxcmpcx,bxjnemidline_4exit_lines:retmid_lineendpboxprocnear;drawaboxpushcxpushdxpushcxpushdxpushcxpushdxpushcxpushdxmovsi,1calldraw_line;toppopdxpopcxaddcx,bxmovsi,0calldraw_line;rightpopdxpopcxmovsi,0calldraw_line;leftpopdxpopcxmovsi,1adddx,bxcalldraw_line;bottompopdxpopcxretboxendpspaceprocnear;displayaspacemovah,02movdl,''int21hretspaceendpreturnprocnear;回車movah,2movdl,0ahint21hmovdl,0dhint21hretreturnendptextprocnear;顯示文本信息movbh,0movdh,0movdl,0movah,2int10hmovdx,offsetbuff2movah,09int21htextendpheartprocnearmovcx,136;draw_heartmovdx,93movsi,0movbx,5moval,2calldraw_linemovcx,137;draw_heartmovdx,91movsi,0movbx,9calldraw_linemovcx,138;draw_heartmovdx,90movsi,0movbx,12calldraw_linemovcx,139;draw_heartmovdx,89movsi,0movbx,14calldraw_linemovcx,140;draw_heartmovdx,88movsi,0movbx,16calldraw_linemovcx,141;draw_heartmovdx,88movsi,0movbx,17calldraw_linemovcx,142;draw_heartmovdx,87movsi,0movbx,19calldraw_linemovcx,143;draw_heartmovdx,87movsi,0movbx,20calldraw_linemovcx,144;draw_heartmovdx,87movsi,0movbx,21calldraw_linemovcx,145;draw_heartmovdx,88movsi,0movbx,21calldraw_linemovcx,146;draw_heartmovdx,88movsi,0movbx,22calldraw_linemovcx,147;draw_heartmovdx,89movsi,0movbx,22calldraw_linemovcx,148;draw_heartmovdx,90movsi,0movbx,22calldraw_linemovcx,149;draw_heartmovdx,91movsi,0movbx,22calldraw_linemovcx,150;1draw_heartmovdx,91movsi,0movbx,22calldraw_linemovcx,151;draw_heartmovdx,90movsi,0movbx,22calldraw_linemovcx,152;draw_heartmovdx,89movsi,0movbx,22calldraw_linemovcx,153;draw_heartmovdx,88movsi,0movbx,22calldraw_linemovcx,154

溫馨提示

  • 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

提交評論