霓虹燈顯示程序設(shè)計(jì)_第1頁
霓虹燈顯示程序設(shè)計(jì)_第2頁
霓虹燈顯示程序設(shè)計(jì)_第3頁
霓虹燈顯示程序設(shè)計(jì)_第4頁
霓虹燈顯示程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄摘要.1 設(shè)計(jì)內(nèi)容簡介12 霓虹燈顯示程序設(shè)計(jì)22.1 設(shè)計(jì)任務(wù)及要求.22.2 設(shè)計(jì)方案及程序流程圖.22.2.1 主程序流程圖.22.2.2 漢字顯示閃爍子程序.32.2.3 程序結(jié)果顯示.62.3 主要程序段與程序設(shè)計(jì)102.3.1 程序中用到的DOS功能調(diào)用.102.3.2 程序中用到的BIOS內(nèi)的中斷功能102.3.3 主要程序段分析.113 程序調(diào)試說明.163.1 調(diào)試工具163.2調(diào)試過程.164 課程設(shè)計(jì)總結(jié).17參考文獻(xiàn).18附錄 源程序清單與注釋.1926摘要霓虹燈是日常生活中最常見的燈飾,它裝點(diǎn)了晚上,豐富了人們的生活。通過匯編語言,實(shí)現(xiàn)霓虹燈的顯示與閃爍,可以很方

2、便的達(dá)到想要的效果。匯編語言的INT 10號(hào)中斷提供了設(shè)置顯示模式、設(shè)置顏色模式、設(shè)置光標(biāo)位置、按指定屬性顯示字符等功能號(hào),可以顯示漢字,同時(shí)也提供了初始化屏幕或滾屏等功能號(hào),通過擦除子程序以及清屏子程序的配合運(yùn)用,從而達(dá)到讓漢字閃爍的功能。正確編排漢字組成點(diǎn)的坐標(biāo)、顏色以及ASCII碼值,就可以得到想要顯示的漢字,合理運(yùn)用INT 10號(hào)中斷的功能號(hào),正確調(diào)用擦除子程序和清屏子程序就可以得到想要的閃爍效果。關(guān)鍵字:霓虹燈 中斷 子程序 閃爍 顯示霓虹燈顯示程序設(shè)計(jì)1 設(shè)計(jì)內(nèi)容簡介匯編語言是計(jì)算機(jī)提供給用戶的最快最有效的語言,也是能過利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的唯一語言,是操作系統(tǒng)等

3、其它核心課程的必要先修課。匯編語言的應(yīng)用有很多,其中,圖形文字的顯示就是計(jì)算機(jī)的一項(xiàng)基本應(yīng)用。本次課程設(shè)計(jì)說明書在簡單說明課題的硬件設(shè)施工作原理后,采用BIOS的 INT 10H 顯示功能調(diào)用,設(shè)置為AH=0,AL=4的320×200彩色圖像顯示方式,利用AH=12寫點(diǎn)功能,通過寫ASCII碼,來組成文字,其中ASCII碼的位置可由行數(shù)與列數(shù)的二維坐標(biāo)確定,從定義的區(qū)域內(nèi)開始,行向下自增1,列向右自減1,逐列寫ASCII碼。為了程序中代碼的方便書寫,須事先利用坐標(biāo)紙將自己要顯示的字用ASCII碼拼出來,同時(shí)設(shè)定ASCII碼的顏色值。程序中將所要顯示的文字的位形圖寫在數(shù)據(jù)段中,每行數(shù)據(jù)

4、段定義文字的一個(gè)點(diǎn),定義中包含組成點(diǎn)的ASCII碼對(duì)應(yīng)的數(shù)值、顏色以及其對(duì)應(yīng)的二維坐標(biāo)。文字的閃爍通過清屏程序和擦除程序同時(shí)作用來實(shí)現(xiàn)。退出通過檢測(cè)輸入數(shù)值與Q或q大小的比較來實(shí)現(xiàn)。整個(gè)設(shè)計(jì)的重點(diǎn)在于數(shù)據(jù)段的編寫以及清屏、擦除子程序的合理調(diào)用。2 霓虹燈顯示程序設(shè)計(jì)2.1 設(shè)計(jì)任務(wù)及要求本次微機(jī)課程設(shè)計(jì)是一道文本顯示設(shè)計(jì)題,由任務(wù)書中容易得到要求大致如下:1用匯編語言編寫一個(gè)霓虹燈的模擬顯示程序;2在屏幕上顯示你的中文名字或其它文字,按某種規(guī)律閃爍變化,按“q”鍵退出。題設(shè)中給出的要求比較簡單,容易知道,編寫出的程序要達(dá)到兩種效果:1、能夠顯示某些文字;2、顯示的文字能夠按照某種形式閃爍,閃爍

5、的方式不限。同時(shí),在程序運(yùn)行的時(shí)候,如果輸入Q或q,程序能夠退出,返回運(yùn)行前的界面。2.2 設(shè)計(jì)方案及程序流程圖本次設(shè)計(jì)的流程圖由主程序流程圖和子程序流程圖組成。2.2.1 主程序流程圖設(shè)計(jì)思路為:數(shù)據(jù)段初始化調(diào)用漢字顯示子程序,顯示漢字“大”調(diào)用條紋顯示程序,顯示運(yùn)動(dòng)的條紋調(diào)用漢字子程序,顯示漢字“小”判斷是否有字符輸入,沒有的話繼續(xù)執(zhí)行顯示程序有字符輸入時(shí),判斷輸入字符是否為“Q”、”q” 不為“Q”、“q”時(shí),執(zhí)行顯示程序?yàn)椤癚”、“q”時(shí),退出程序,等待程序繼續(xù)執(zhí)行。根據(jù)設(shè)計(jì)思路得到本次課程設(shè)計(jì)的流程圖如圖1所示。開始數(shù)據(jù)段初始化調(diào)用漢字顯示子程序,顯示漢字“大”調(diào)用條紋顯示子程序,顯

6、示運(yùn)動(dòng)的條紋調(diào)用漢字顯示子程序,顯示漢字“小”輸入字符是否為Q、q ?結(jié)束判斷是否有字符輸入? N Y N Y圖1 霓虹燈顯示主程序2.2.2 漢字顯示閃爍子程序本次課程設(shè)計(jì)顯示的漢字比較簡單,就設(shè)置為“大”、“小”,在顏色設(shè)置方面做了一些改變,同一個(gè)字中選用了兩種顏色,閃爍的形式設(shè)定的為有一個(gè)V形的藍(lán)色條紋,條紋掃過文字時(shí),文字被覆蓋,條紋掃過以后,文字重新出現(xiàn)。待文字顯示完畢后,V形藍(lán)色條紋再次掃過文字,重復(fù)上述過程,從而實(shí)現(xiàn)文字的隱現(xiàn)。根據(jù)上述敘述,有文字的顯示子程序、V形條紋的顯示子程序、擦除子程序,對(duì)應(yīng)的流程圖分別如圖2、3、4所示。 開始寄存器入棧Cx寄存器清零保存組成點(diǎn)的基本信息

7、Cx入棧在指定坐標(biāo)處寫第一個(gè)點(diǎn)Cx出棧,保存循環(huán)次數(shù)Cx中內(nèi)容自減1判斷cx中內(nèi)容是否為0?寄存器出棧結(jié)束 NY圖2 文字顯示子程序流程圖 開始寄存器入棧Cx寄存器清零保存組成點(diǎn)的基本信息判斷是否到達(dá)屏幕最左端?在指定坐標(biāo)處寫第一個(gè)點(diǎn)Cx寄存器入棧Cx出棧,保存循環(huán)次數(shù)判斷指定坐標(biāo)處字符是否為?判斷制定坐標(biāo)處字符是否為*?將字符寫11次寄存器出棧 結(jié)束 Y N Y N N Y圖3 擦除藍(lán)色V形條紋的子程序 開始保存組成點(diǎn)的基本信息判斷是否到達(dá)屏幕最左端?判斷指定位置處字符是否為?判斷指定位置處字符是否為*?將字符寫11個(gè)將字符改為#列坐標(biāo)dl自減1保存點(diǎn)的基本信息 結(jié)束 Y N Y N N Y

8、 圖4 擦除子程序流程圖2.2.3 程序結(jié)果顯示本次課程設(shè)計(jì)預(yù)期運(yùn)行的結(jié)果為,顯示漢字“大”、“小”,并按照某種形式進(jìn)行閃爍。文字閃爍的過程分別如下所示。程序運(yùn)行之初,首先在屏幕上顯示漢字“大”,如圖5所示。圖5 運(yùn)行初顯示漢字“大” 漢字顯示完以后,藍(lán)色V形條紋開始從右向左行進(jìn),運(yùn)動(dòng)后留下“#”組成的藍(lán)色條紋若干行,如圖6所示。圖6 漢字顯示后,V形條紋開始向左行進(jìn)藍(lán)色V形條紋掃過文字“大”,同時(shí)將文字覆蓋,如圖7所示。圖7 藍(lán)色條紋掃過文字并將其覆蓋 藍(lán)色V形條紋掃過文字,將文字覆蓋,在屏幕上只留下“#”組成的藍(lán)色條紋所干行,如圖8所示。圖8 屏幕上留下“#”組成的藍(lán)色條紋在藍(lán)色條紋將“大

9、”字覆蓋之后,在這些藍(lán)色條紋衫上將顯示文字“小”,“小”顯示完之后,將顯示“大”,如圖9所示。圖9 藍(lán)色條紋掃過后,漢字“小”、“大”先后顯示在這兩個(gè)漢字顯示之后,藍(lán)色V形條紋將重新開始自右向左行進(jìn),將已經(jīng)顯示的漢字覆蓋,如圖10所示。圖10 文字顯示后藍(lán)色V形條紋繼續(xù)行進(jìn),覆蓋文字藍(lán)色條紋最終將漢字全部覆蓋,如圖11所示。圖11 文字覆蓋后的屏幕 文字的閃爍就是按照上述7幅圖的形式重復(fù)進(jìn)行的。2.3 主要程序段與程序設(shè)計(jì)分析2.3.1 程序中用到的DOS功能調(diào)用(1)01H號(hào)功能調(diào)用功能:從鍵盤輸入一個(gè)字符輸入?yún)?shù):無輸出參數(shù):AL=ASCII碼(2)0BH號(hào)功能調(diào)用功能描述:檢查標(biāo)準(zhǔn)輸入設(shè)

10、備上是否有字符可讀,該輸入操作可被重定向入口參數(shù):AH0BH出口參數(shù):AL00H無字符可讀;FFH有字符可讀(3)4CH號(hào)功能調(diào)用功能:返回操作系統(tǒng)4CH調(diào)用:MOV AH,4CHINT 21H2.3.2 程序中用到的BIOS內(nèi)的中斷功能(1)02H 號(hào)功能調(diào)用功能:用文本坐標(biāo)下設(shè)置光標(biāo)位置 入口參數(shù): AH02H BH顯示頁碼 DH行(Y坐標(biāo)) DL列(X坐標(biāo)) 出口參數(shù): 無 (2)08H 號(hào)功能調(diào)用功能:讀光標(biāo)處的字符及其屬性 入口參數(shù):AH08H BH顯示頁碼 出口參數(shù):AH屬性 AL字符(3)09H 號(hào)功能調(diào)用功能:在當(dāng)前光標(biāo)處按指定屬性顯示字符 入口參數(shù):AH09H AL字符 BH

11、顯示頁碼 BL屬性(文本模式)或顏色(圖形模式) CX重復(fù)輸出字符的次數(shù) 出口參數(shù):無 (4)0FH號(hào)功能調(diào)用 功能:讀取顯示器模式 入口參數(shù):AH0FH 出口參數(shù):AH屏幕字符的列數(shù) AL顯示模式(參見功能00H中的說明) BH頁碼 2.3.3 主要程序段分析(1)數(shù)據(jù)段本次課程設(shè)計(jì)的中心就在于數(shù)據(jù)段的編寫,數(shù)據(jù)段中的漢字可以直接運(yùn)用字摸軟件進(jìn)行取模來編寫程序,也可運(yùn)用寫點(diǎn)的方式來實(shí)現(xiàn)。在本次課程設(shè)計(jì)數(shù)據(jù)段的定義中,由組成點(diǎn)的ASCII碼值、顏色以及對(duì)應(yīng)的X、Y坐標(biāo)組成。例如:jeep db 6 db 3dh,0eh,0,0 db 40h,0eh,1,-1 db 3dh,0eh,1,0 db

12、 3ch,0eh,0,-1 db 02ah,0bh,-1,0 db 3ch,0eh,-1,0這段程序是擦除藍(lán)色V形條紋的位形圖,其中3dh為條紋組成的第一個(gè)點(diǎn)的ASCII碼值,在屏幕上顯示的為“=”, 0eh為顏色設(shè)置,為黃色,(0,0)為這個(gè)點(diǎn)的坐標(biāo),第一個(gè)為行坐標(biāo),第二個(gè)為列坐標(biāo),這個(gè)點(diǎn)為擦除藍(lán)色V形條紋組成點(diǎn)的基準(zhǔn)坐標(biāo)。其他的點(diǎn)的前兩項(xiàng)設(shè)置與基準(zhǔn)坐標(biāo)一致,坐標(biāo)設(shè)置按照矩陣的形式,向右則列自增1,像左則列自減1,向下則行自增1,像上則行自減1,每寫出一個(gè)點(diǎn)后,寫出的點(diǎn)的坐標(biāo)變回基準(zhǔn)坐標(biāo)(0,0),由此類推,寫出組成漢字所需要的所有點(diǎn)的坐標(biāo)。值得注意的是,本次課程設(shè)計(jì)的點(diǎn)的坐標(biāo),是在選定基準(zhǔn)

13、坐標(biāo)后,從上向下寫第一個(gè)的點(diǎn),隨后從下向上寫第二列的點(diǎn),就按照這樣的規(guī)律,直至將所有的點(diǎn)的坐標(biāo)寫完為止。(2)在屏幕上寫點(diǎn)屏幕上寫點(diǎn)是本次程序的重點(diǎn)。寫點(diǎn)的過程以及程序大致如下,首先要將漢字位形圖的地址送給寄存器,程序如下所示:lea di,D mov dh,8 mov dl,22其中,dh和dl分別對(duì)應(yīng)于要寫漢字的起始點(diǎn)在屏幕上顯示時(shí)的第一個(gè)點(diǎn)的行列坐標(biāo)。隨后要讀取組成點(diǎn)的信息,程序如下所示:mov char_cnt1,cx mov pointer1,di mov line_on1,dh mov col_on1,dl mov char,cx 程序中char_cnt1指字符,pointer1指

14、顏色,line_on1為行坐標(biāo),col_on1為列坐標(biāo)。在子程序move_shape1、Amust_2、Amust_21中,寫點(diǎn)的程序大致相同,程序如下:add dh,di+2 add dl,di+3 mov ah,2 int 10h mov al,di mov bl,di+1 push cx mov cx,1 mov ah,09 int 10h pop cx add di,4 值得指出的是,程序中將寄存器cx入棧隨后又出棧的目的在于,入棧是為了保存cx中的數(shù)值,將寄存器cx空出來,作為計(jì)數(shù)用,隨后的出棧則是重新將已經(jīng)保存的cx中的值保存到cx中,作為循環(huán)次數(shù)用。程序中一直到pop cx之前的

15、程序都是寫點(diǎn)的程序,而 add di,4則是為寫下一個(gè)點(diǎn)做準(zhǔn)備,只需要返回繼續(xù)執(zhí)行上面的程序則可以繼續(xù)寫點(diǎn)了。(3)擦除藍(lán)色V形條紋的形成數(shù)據(jù)段中定義的組成點(diǎn)數(shù)不足以將漢字覆蓋,因而要將db 40h,0eh,1,-1以及 db 02ah,0bh,-1,0這兩個(gè)點(diǎn)重復(fù)寫11次,從而達(dá)到擴(kuò)充條紋,形成條紋的目的,程序如下:cmp al,40h je Aexitx0 cmp al,02ah je Aexitx0 Aexitx0: dec Acount0 jne Aplot_next mov Acount0,11 在主程序中已經(jīng)將 Acount0的值定義為11,在11個(gè)“”寫完之后,將給 Acount

16、0重新賦值為11,在遇到02ah對(duì)應(yīng)的字符時(shí),將繼續(xù)執(zhí)行程序 Aexitx0,在將此字符重復(fù)寫11次。 (4)藍(lán)色條紋的移動(dòng)與屏幕的擦除本次課程設(shè)計(jì)中,文字的閃爍是通過藍(lán)色V形條紋的掃過覆蓋文字來實(shí)現(xiàn)的。程序如下所示:Aerase_next: add dh,di+2 add dl,di+3 cmp dl,2 je Aleft mov ah,2 int 10h mov ah,8 int 10h cmp al,40h je Aexitx2 cmp al,02ah je Aexitx2 jmp Aexitx3 Aexitx2: dec Acount0 jne Aexitx3 mov Acount0,

17、11 Aexitx3: mov al,'#' mov bl,03h push cx mov cx,1 mov ah,9 int 10h pop cx cmp Acount0,11 jne Aerase_next add di,4 loop Aerase_nextdec col_on1 程序中也同樣涉及了和*的持續(xù)編寫程序,以及寄存器cx的出棧入棧操作的編寫程序,再此不做多的解釋。在每次寫完擦除藍(lán)色V形條紋后,dec col_on1實(shí)現(xiàn)了起始點(diǎn)列坐標(biāo)的自減1,從而實(shí)現(xiàn)條紋的從右向左行進(jìn)。而屏幕的擦除則是通過比較V形條紋經(jīng)過處的字符與#的比較,相同的話不做改變,不同的話將此字符改變

18、為#來實(shí)現(xiàn)的。(5)按Q、q退出程序設(shè)計(jì)中要求程序在運(yùn)行時(shí),按下Q或是q,能夠退出,程序如下:mov ah,0bh int 21h cmp al,0 jz Aagain0 mov ah,1 int 21h cmp al,'q' jz exit cmp al,'Q' jz exitexit: mov ax,4c00h int 21h程序先判斷有沒有字符輸入,沒有就返回執(zhí)行Aagain0,有再將輸入的字符與Q或q進(jìn)行判斷,相等時(shí)則跳轉(zhuǎn)至程序exit,返回DOS界面,實(shí)現(xiàn)運(yùn)行程序的退出。3程序調(diào)試說明3.1 調(diào)試工具調(diào)試使用匯編語言調(diào)試器DEBUG進(jìn)行調(diào)試。DEBUG

19、 程序是專門為匯編語言設(shè)計(jì)的一種調(diào)試工具。它能給DOS提供有力的糾錯(cuò)、跟蹤和運(yùn)行功能,并能檢查系統(tǒng)的各個(gè)數(shù)據(jù)。該工具可以通過單步、設(shè)置斷點(diǎn)等方法為程序設(shè)計(jì)者提供一種有效的調(diào)試手段,其功能主要包括以下幾個(gè)方面:1) 直接輸入、更改、跟蹤、運(yùn)行匯編語言源程序;2) 觀察操作系統(tǒng)的內(nèi)容;3) 查看BIOS的內(nèi)容;4) 觀察更改RAM內(nèi)部的設(shè)置值;5) 以扇區(qū)或文件的形式讀寫磁盤數(shù)據(jù)。3.2調(diào)試過程本次課程設(shè)計(jì)中,在調(diào)試過程中曾出現(xiàn)不少問題。首先是按下Q或q時(shí)程序無法退出,檢查后發(fā)現(xiàn),在程序中雖然運(yùn)用21H號(hào)中斷中的1號(hào)功能,設(shè)置了在電腦上輸入一個(gè)字符與Q或是q進(jìn)行比較,卻沒有設(shè)置功能去判斷是否輸入了

20、字符,從而造成錯(cuò)誤。調(diào)試過程中最常見的錯(cuò)誤是,不能生成OBJ文件,就算運(yùn)行成功,顯示的結(jié)果也并不是預(yù)期的效果,而程序中給出的錯(cuò)誤信息無法查出。仔細(xì)分析程序之后,依舊未發(fā)現(xiàn)程序的錯(cuò)誤之處,無意之中在數(shù)據(jù)段中將每個(gè)組成漢字的點(diǎn)數(shù)定義之后,程序運(yùn)行成功,分析原因是在程序中,要將漢字的點(diǎn)數(shù)送給寄存器,作為程序中寫點(diǎn)的循環(huán)次數(shù),如果沒有將其進(jìn)行定義,則無法知道循環(huán)次數(shù),就會(huì)造成預(yù)期的漢字以亂碼形式顯示。程序的數(shù)據(jù)段定義,也讓我花費(fèi)了諸多心思。點(diǎn)的形狀以及顏色還好定義,關(guān)鍵在于點(diǎn)的行列坐標(biāo),不能有絲毫的錯(cuò)誤,否則也會(huì)造成程序顯示結(jié)果的錯(cuò)誤。4課程設(shè)計(jì)總結(jié)課程設(shè)計(jì)是培養(yǎng)和鍛煉學(xué)生在學(xué)習(xí)完本門課后綜合應(yīng)用所學(xué)

21、理論知識(shí)解決實(shí)際工程設(shè)計(jì)和應(yīng)用問題的能力、進(jìn)行工程實(shí)訓(xùn)的重要教學(xué)環(huán)節(jié),它具有動(dòng)手、動(dòng)腦,理論聯(lián)系實(shí)際的特點(diǎn),是培養(yǎng)在校工科大學(xué)生理論聯(lián)系實(shí)際、敢于動(dòng)手、善于動(dòng)手和獨(dú)立自主解決設(shè)計(jì)實(shí)踐中遇到的各種問題能力的一種較好方法。 微機(jī)原理與接口技術(shù)是一門應(yīng)用性、綜合性、實(shí)踐性較強(qiáng)的課程,沒有實(shí)際的有針對(duì)性設(shè)計(jì)環(huán)節(jié),學(xué)生就不能很好的理解和掌握所學(xué)的技術(shù)知識(shí),更缺乏解決實(shí)際問題的能力。所以通過有針對(duì)性的課程設(shè)計(jì),使學(xué)生學(xué)會(huì)系統(tǒng)地綜合運(yùn)用所學(xué)的技術(shù)理論知識(shí),提高學(xué)生在微機(jī)應(yīng)用方面的開發(fā)與設(shè)計(jì)本領(lǐng),系統(tǒng)的掌握微機(jī)硬軟件設(shè)計(jì)方法。我此次微機(jī)原理與接口技術(shù)課程設(shè)計(jì)的題目是霓虹燈顯示程序設(shè)計(jì),即要求在屏幕上顯示自己的

22、名字或是其他文字,同時(shí)讓這些文字按照一定的規(guī)律進(jìn)行閃爍。由于本次課程設(shè)計(jì)中用到的知識(shí)中,INT 10號(hào)中斷為基礎(chǔ),而我所學(xué)的知識(shí)中,多用到的是INT 21 號(hào)中斷,因此在課程設(shè)計(jì)開始之初,我在網(wǎng)上以及圖書館查閱了大量資料,對(duì)INT 10號(hào)中斷的一些常用的功能有了一定的了解,同時(shí)掌握了一些通過寫點(diǎn)、寫ASCII碼值或是寫像素點(diǎn)的方法在屏幕上顯示自己想要顯示的文字,運(yùn)用INT 10號(hào)中斷中的顏色設(shè)置,讓文字呈現(xiàn)不同的顏色。在本次課程設(shè)計(jì)中,我曾經(jīng)遇到了不少問題。雖然在網(wǎng)上找到了不少參考程序,但是均不符合題意,因而只得在理解參考程序的基礎(chǔ)之上,將它們便為己用。起初,我是在不停的修改數(shù)據(jù)段試圖找出程序

23、寫點(diǎn)的方式,在費(fèi)勁心思掌握方法之后,卻又因?yàn)闆]有定義點(diǎn)的個(gè)數(shù)同樣導(dǎo)致失敗,始終不能生成OBJ文件。還好,這些問題都在同學(xué)的幫助以及自己查閱之后的情況下得到了很好的解決。通過課程設(shè)計(jì)實(shí)踐,我不僅培養(yǎng)了自己的實(shí)際動(dòng)手能力,檢驗(yàn)自己對(duì)本門課學(xué)習(xí)的情況,更培養(yǎng)了在實(shí)際的工程設(shè)計(jì)中查閱專業(yè)資料、工具書或參考書,掌握工程設(shè)計(jì)手段和軟件工具,并能以圖紙和說明書表達(dá)設(shè)計(jì)思想和結(jié)果的能力,實(shí)現(xiàn)由學(xué)習(xí)知識(shí)到應(yīng)用知識(shí)的初步過渡,同時(shí)也形成事實(shí)求是和嚴(yán)肅認(rèn)真的工作態(tài)度,為自己今后進(jìn)入社會(huì)參加工作打下良好基礎(chǔ)。參考文獻(xiàn)1鄭學(xué)堅(jiān)、周斌.微型機(jī)算計(jì)原理及應(yīng)用(第三版).北京:清華大學(xué)出版社,2003.62譚浩強(qiáng).C程序設(shè)計(jì)

24、(第二版).北京:清華大學(xué)出版社,2002.13 美Harold J.Rood著,杜大鵬、龔小平等譯.北京:中國水利水電出版社,2004.64周佩玲.微機(jī)原理與接口技術(shù).北京:電子工業(yè)出版社,2006.65朱定華.微機(jī)原理、匯編與接口技術(shù)學(xué)習(xí)指導(dǎo).北京:清華大學(xué)出版社,2004.7附錄 源程序清單與注釋data_seg segment ;定義數(shù)據(jù)段jeep db 6 ;擦除V型條紋的位形圖 db 3dh,0eh,0,0 db 40h,0eh,1,-1 db 3dh,0eh,1,0 db 3ch,0eh,0,-1 db 02ah,0bh,-1,0 db 3ch,0eh,-1,0 ;漢字“大”、“

25、小”的位形圖也用相同方法得到 char_cnt1 dw ? pointer1 dw ? line_on1 db ? col_on1 db ? char dw ? Acount db ? Acount0 db ? Acount1 db ? data_seg ends code_seg segment assume cs:code_seg,ds:data_seg main proc far ;定義主函數(shù) push ds ;寄存器入棧 sub ax,ax ;ax寄存器清零 sub cx,cx ;cx寄存器清零 push ax push cx mov ax,data_seg mov ds,ax mov

26、 Acount1,2 mov Acount0,11Aagain0: lea di,D ;把漢字“大”的位形圖地址送給di mov dh,8 ;組成漢字“大”的點(diǎn)的起始點(diǎn)的顯示坐標(biāo) mov dl,22 call move_shape1 ;調(diào)用子程序move_shape1 call Amust_2 ;調(diào)用子程序Amust_2 lea di,jeep ;把jeep的地址送給di mov dh,4 ;組成jeep的起始點(diǎn)的坐標(biāo) mov dl,75 call move_shape1 ;調(diào)用子程序move_shape1 call Amust_21 ;調(diào)用子程序Amust_21 lea di,X ;把漢字“

27、小”的位形圖地址送給di mov dh,12 ;組成漢字“小”的起始點(diǎn)的顯示坐標(biāo) mov dl,44 call move_shape1 ;調(diào)用子程序move_shape1 call Amust_2 ;調(diào)用子程序Amust_2 mov ah,0bh ;判斷有沒有字符輸入 int 21h cmp al,0 jz Aagain0 ;沒有字符輸入時(shí)返回執(zhí)行Aagain0 mov ah,1 int 21h cmp al,'q' ;輸入字符為“Q”或是“q”時(shí)執(zhí)行exit jz exit cmp al,'Q' jz exitexit: mov ax,4c00h ;返回DOS

28、界面 int 21h move_shape1 proc near ;move_shape1子程序 push ax push bx push cx push dx push di mov ah,0fh ;讀取顯示器模式 int 10h sub ch,ch mov cl,di inc di mov char_cnt1,cx mov pointer1,di mov line_on1,dh mov col_on1,dl mov char,cx pop di pop dx pop cx pop bx pop ax ret move_shape1 endp ;move_shape1子程序結(jié)束 Amust_

29、2 proc near ;Amust_2子程序 push ax push bx push cx push dx push di mov ah,0fh ;讀取顯示器模式 int 10h sub cx,cx ;cx寄存器清零 mov cx,char_cnt1 ;讀取位形圖組成點(diǎn)的字符、顏色、橫縱坐標(biāo)信息 mov di,pointer1 mov dh,line_on1 mov dl,col_on1Aplot_next0: add dh,di+2 add dl,di+3 mov ah,2 ;設(shè)置光標(biāo)位置 int 10h mov al,di mov bl,di+1 push cx mov cx,1 mo

30、v ah,09 int 10h ;寫第一個(gè)點(diǎn) pop cx ;cx出棧,所存的為初始值,作為循環(huán)次數(shù) add di,4 ;準(zhǔn)備寫下一個(gè)點(diǎn) call dly_qrtr ; 調(diào)用延時(shí)子程序 loop Aplot_next0 ;返回執(zhí)行Aplot_next0 pop di pop dx pop cx pop bx pop ax ret Amust_2 endp Amust_21 proc near ;Amust_21子程序 push ax push bx push cx push dx push di ;寄存器入棧 mov ah,0fh int 10h mov Acount,20 Aexit1: c

31、all dly_qrtr dec Acount jne Aexit1 ;延時(shí),延長時(shí)間為延時(shí)程序中的20倍 Aexit5: sub cx,cx mov cx,char_cnt1 ;讀取位形圖組成點(diǎn)的字符、顏色、橫縱坐標(biāo)信息 mov di,pointer1 mov dh,line_on1 mov dl,col_on1Aplot_next: add dh,di+2 add dl,di+3 cmp dl,2 je Aexit4 ;判斷是否到達(dá)屏幕最左端,是的話執(zhí)行Aexit4: mov ah,2 int 10h mov al,di mov bl,di+1 push cx mov cx,1 mov a

32、h,09 int 10h ;在指定坐標(biāo)處寫第一個(gè)點(diǎn) pop cx ;保存循環(huán)次數(shù) cmp al,40h ; 將指定坐標(biāo)處的字符與進(jìn)行比較 je Aexitx0 ;相同時(shí)候執(zhí)行Aexitx0 cmp al,02ah ;將指定坐標(biāo)處的字符與*進(jìn)行比較 je Aexitx0 ;相同時(shí)候執(zhí)行Aexitx0 jmp Aexitx1 ;與上邊兩種情況不同時(shí)執(zhí)行Aexitx1 Aexitx0: dec Acount0 ;若制定坐標(biāo)處字符為或是*,則將此字符循環(huán)寫11次 jne Aplot_next ;不同時(shí)返回執(zhí)行Aplot_next mov Acount0,11 Aexitx1: add di,4 ;準(zhǔn)備寫第二個(gè)點(diǎn) loop Aplot_next call dly_qrtr call dly_qr

溫馨提示

  • 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)論