DOS下屏保程序設(shè)計(jì)實(shí)現(xiàn)課程設(shè)計(jì)_第1頁
DOS下屏保程序設(shè)計(jì)實(shí)現(xiàn)課程設(shè)計(jì)_第2頁
DOS下屏保程序設(shè)計(jì)實(shí)現(xiàn)課程設(shè)計(jì)_第3頁
DOS下屏保程序設(shè)計(jì)實(shí)現(xiàn)課程設(shè)計(jì)_第4頁
DOS下屏保程序設(shè)計(jì)實(shí)現(xiàn)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

中國農(nóng)業(yè)大學(xué)課程設(shè)計(jì)報(bào)告(2015-2016 學(xué)年夏季學(xué)期)設(shè)計(jì)題目: DOS 下屏保程序設(shè)計(jì)實(shí)現(xiàn) 課程名稱: 匯編語言課程設(shè)計(jì) 任課教師: 沈翠華 班 級: 計(jì)算機(jī) 141 學(xué) 號: 1408010112 姓 名: 黃帥琪 成績目 錄一、 要求與需求分析 .11. 題目重述: .12. 需求分析: .1二、 程序設(shè)計(jì)分析: .11. 屏保繪制模塊 .11.1、 圖形錄入: .11.2、 動畫繪制: .22. 非工作狀態(tài)計(jì)時模塊 .22.1、 計(jì)時功能: .22.2、 判斷是否處于工作狀態(tài) .23. 檢測鍵盤輸入模塊 .34. 中斷設(shè)置及內(nèi)存駐留程序 .3三、 程序流程圖 .31. 裝載程序: .32. 定時器中斷處理程序: .43. 鍵盤中斷處理程序: .44. 屏幕保護(hù)程序: .5四、 核心模塊功能介紹 .51. 裝載程序(INSTALL): .52. 更改后的計(jì)時器中斷(FUNCTIMER): .53. 更改后的鍵盤中斷(INT9): .64. 屏保程序(SCREENSAVER): .65. 屏保繪制模塊(PRINT): .66. 貼圖函數(shù)(ONEBITMAP/ZEROBITMAP): .67. 延時處理函數(shù)(ONEBITMAP/ZEROBITMAP): .68. 清屏宏(CLRSCREEN): .6五、 程序運(yùn)行步驟 .6六、 設(shè)計(jì)過程中遇到的主要技術(shù)難點(diǎn)及解決方案 .71. 中斷設(shè)置及駐留: .72. 工作狀態(tài)的判斷: .73. 動畫的繪制: .74. 恢復(fù)原本工作狀態(tài): .7七、 個人體會 .7八、 參考文獻(xiàn) .8九、 程序清單 .81DOS 下屏幕保護(hù)程序的設(shè)計(jì)與實(shí)現(xiàn)一、 要求與需求分析1. 題目重述:編寫一個 DOS 下的屏幕保護(hù)程序(也可以是 windows 下的屏保) 。該程序具有以下功能:在一段時間內(nèi)(如 1 分鐘)沒有任何鍵鍵入時,程序自動進(jìn)入屏保(一個圖畫一直在不斷的移動顯示,圖案任意) ,直到按任意鍵結(jié)束。2. 需求分析:在未啟動屏幕保護(hù)程序的情況下,當(dāng)長時間不使用電腦的時顯示器屏幕的顯示換面長時間不變,這將使屏幕發(fā)光器件疲勞、變色、甚至燒毀,最終使屏幕某個區(qū)域偏色或變暗。因此一個合格的屏幕保護(hù)程序應(yīng)滿足條件:1. 圖案動態(tài)且在屏幕上的分布盡量均勻2. 當(dāng)停止工作后一段時間內(nèi)才進(jìn)入屏保3. 一旦按鍵后結(jié)束屏幕保護(hù)程序的繪制并恢復(fù)之前工作的內(nèi)容二、 程序設(shè)計(jì)分析:針對上述對于需求的分析,可將目標(biāo)程序分為三個功能模塊,即:屏保繪制模塊、非工作狀態(tài)計(jì)時模塊、檢測鍵盤輸入模塊。同時為了各個模塊正常工作,還需使用 DOS 功能設(shè)置中斷及將各功能模塊在內(nèi)存中駐留。1. 屏保繪制模塊1.1、 圖形錄入:ROM BIOS 顯示例程支持多種文本方式和圖形方式。在不同的顯示方式下屏幕顯示的像素分辨率、字符分辨率、顏色數(shù)等都不同。為更細(xì)致的展現(xiàn)動畫細(xì)節(jié),本程序調(diào)用 INT10的 0 號子功能,選擇 320*200 分別率圖形 16 色顯示模式;并基于此模式將要顯示的像素圖轉(zhuǎn)化為相應(yīng)的顯存矩陣,每個像素點(diǎn)占用一個字節(jié)存儲顏色及亮度信息,存儲圖片共占用27*35 Byte。在圖形顯示時調(diào)用 INT10 的 5 號子功能將圖片置入顯存的相應(yīng)內(nèi)存區(qū)間。21.2、 動畫繪制:本程序在繪制動畫時考慮到動畫的連貫性,使用了兩個顯存頁。一個顯存頁作為顯示頁,另一個顯存頁作為后臺頁,繪制圖像時僅僅對后臺頁執(zhí)行像素操作,顯示顯存頁。動畫通過改變圖案的繪制位置實(shí)現(xiàn),當(dāng)圖案繪制觸及屏幕邊緣時改變繪圖方向,且繪制圖案鹿的方向與動畫運(yùn)動方向同向。動畫繪制過程涉及以下變量作為參數(shù):當(dāng)前繪制頁數(shù)(后臺頁)RECENTPAGE、上一次繪制頁數(shù)(顯示頁)LASTPAGE、當(dāng)前繪圖的頂點(diǎn)坐標(biāo) CURSORX, CURSORY;上一次的繪制坐標(biāo) LASTX,LASTY;橫向繪圖方向 DIRECX;縱向繪圖方向DIRECY;常量的水平繪制速度和垂直繪制速度 VX,VY。下面將詳細(xì)介紹動畫繪制的過程。1. 通過交換 RECENTPAGE 與 LASTPAGE 的值,完成對后臺頁與顯示頁的頁碼的交換;2. 根據(jù) DIRECX 判斷繪圖方向,選擇調(diào)用貼圖函數(shù) ONEBITMAP 或 ZEROBITMAP 在后臺頁上以 CURSORX, CURSORY 為頂點(diǎn)繪制圖案。其中 ONEBITMAP 為每列從左到右向顯存錄入像素,ZEROBITMAP 為每列從右到左向顯存錄入數(shù)據(jù);3. 顯示繪制完成的后臺頁并將調(diào)用宏 CLRSCREEN 把原顯示頁清屏;4. 保存繪制坐標(biāo) CURSORX, CURSORY 到 LASTX,LASTY,判斷圖片是否繪制到屏幕邊緣。如是,改變繪圖方向 DIRECX、DIRECY;5. 計(jì)算下次繪圖的坐標(biāo),根據(jù)方向選擇頂點(diǎn)坐標(biāo)加繪制速度 VX,VY 或減 VX,VY。2. 非工作狀態(tài)計(jì)時模塊2.1、 計(jì)時功能:由于計(jì)算機(jī)的 8259A 可編程中斷控制器以 18.2HZ 的頻率產(chǎn)生中斷信號,每次 8259A 產(chǎn)生中斷信號時 CPU 將處理 1CH 號中斷向量所指向的終端處理程序。本程序通過改變 1CH 號中斷處理程序?qū)崿F(xiàn)計(jì)時功能。在每次 1CH 號中斷發(fā)生時,若判斷運(yùn)行標(biāo)志 FLAG 得屏保繪制程序未運(yùn)行,將定時計(jì)數(shù)變量 CLKCNT 減一,若 CLKCNT 歸零,則調(diào)用屏幕保護(hù)函數(shù)進(jìn)入屏保繪制過程。2.2、 判斷是否處于工作狀態(tài)在 DOS 環(huán)境下,可認(rèn)為當(dāng)無字符輸入時為非工作狀態(tài)。因此本程序通過改變鍵盤中斷處理程序?qū)崿F(xiàn)非工作狀態(tài)的計(jì)時。具體實(shí)現(xiàn)方法為每次有鍵盤輸入時將定時計(jì)數(shù)變量CLKCNT 復(fù)位,對非工作狀態(tài)重新計(jì)時并調(diào)用原鍵盤中斷處理函數(shù)。33. 檢測鍵盤輸入模塊該模塊功能為當(dāng)屏保繪制時若有按鍵輸入,則結(jié)束屏保繪制并返回原工作界面。在具體實(shí)現(xiàn)上調(diào)用 INT16H 的 1 號子功能讀鍵盤緩沖區(qū)字符,若緩存區(qū)存在字符,結(jié)束屏保的繪制,返回文字顯示方式并顯示原工作頁的緩存。4. 中斷設(shè)置及內(nèi)存駐留程序該程序作用為設(shè)置中斷及把上述所有模塊在內(nèi)存中駐留,即裝載程序。調(diào)用 INT 21H的 35H 號子功能保存鍵盤中斷的原中斷向量到 SAVINT9,調(diào)用 INT 21H 的 25H 號子功能將非計(jì)時器中斷及鍵盤中斷重置為工作狀態(tài)計(jì)時模塊中的相應(yīng)程序。利用宏操作 PROLEN EQU $-FUNCTIMER 計(jì)算屏保程序占用內(nèi)存的字節(jié)數(shù),調(diào)用 INT 21H 的 31H 號子功能完成內(nèi)存駐留。三、 程序流程圖1. 裝載程序:42. 定時器中斷處理程序:3. 鍵盤中斷處理程序:54. 屏幕保護(hù)程序:四、 核心模塊功能介紹1. 裝載程序(INSTALL):完成修改中斷計(jì)時器(FUNCTIMER)和鍵盤(INT9) 的中斷向量,改變中斷屏蔽,實(shí)現(xiàn)屏保程序的駐留。2. 更改后的計(jì)時器中斷(FUNCTIMER):對非工作狀態(tài)計(jì)時;調(diào)用屏保程序(SCREENSAVER)。63. 更改后的鍵盤中斷(INT9):若回到工作狀態(tài),將計(jì)時器變量復(fù)位。繼承了原鍵盤中斷的其他功能。4. 屏保程序(SCREENSAVER):設(shè)置初始值,控制整個屏保繪制過程。5. 屏保繪制模塊(PRINT):確定圖片像素信息寫入顯存位置,計(jì)算每次貼圖的頂點(diǎn)位置,實(shí)現(xiàn)動畫的產(chǎn)生。6. 貼圖函數(shù)(ONEBITMAP/ZEROBITMAP):屏保繪制模塊(PRINT)的子函數(shù),根據(jù)獲取的頂點(diǎn)位置進(jìn)行貼圖。ONEBITMAP 與ZEROBITMAP 的區(qū)別為貼圖的橫向方向不同。7. 延時處理函數(shù)(ONEBITMAP/ZEROBITMAP):屏保繪制模塊(PRINT)的子函數(shù),起到延時貼圖的作用,讓動畫能流暢顯現(xiàn)。8. 清屏宏(CLRSCREEN):清除將要繪制的頁碼上的像素。五、 程序運(yùn)行步驟1. 在 DOS 環(huán)境下運(yùn)行裝載程序,將程序駐留在內(nèi)存中;2. 若在五秒內(nèi)沒有任何鍵鍵入時,程序自動進(jìn)入屏保,繪制一只跳動的小鹿;3. 在屏保繪制狀態(tài)下任何鍵鍵入時返回原工作狀態(tài)。7六、 設(shè)計(jì)過程中遇到的主要技術(shù)難點(diǎn)及解決方案1. 中斷設(shè)置及駐留:使用宏操作 PROLEN EQU $-FUNCTIMER(FUNCTIMER 為駐留區(qū)的首地址, PROLEN 在程序末尾)計(jì)算屏保程序占用內(nèi)存的字節(jié)數(shù),調(diào)用 INT 21H 的 31H 號子功能完成內(nèi)存駐留。其中屏保程序中所用到的所有數(shù)據(jù)及變量等一并寫入代碼段,而非數(shù)據(jù)段,以實(shí)現(xiàn)同步駐留。2. 工作狀態(tài)的判斷:更改鍵盤中斷,使鍵盤每次發(fā)生中斷時(即觸發(fā)按鍵)都對非工作狀態(tài)的計(jì)時復(fù)位。3. 動畫的繪制:為消除動畫設(shè)計(jì)時的圖像閃爍的,本程序使用多頁動畫技術(shù)。多頁動畫是通過使用頁切換技術(shù)實(shí)現(xiàn)的。頁切換改變顯示頁以繪制出給定動畫序列的相鄰幀。由于圖像通常繪制在不同的頁上( 不是當(dāng)前可見頁),用戶不會看到圖像被繪制或擦除,從而產(chǎn)生高質(zhì)量的動畫而沒有圖像閃爍。4. 恢復(fù)原本工作狀態(tài):本問題暫未解決。設(shè)想中的解決方案是將原本的文本顯存頁保存起來,動畫繪制操作選擇其他的頁面進(jìn)行,在結(jié)束繪制后調(diào)用 INT 10H 的 0 號子功能重新顯示原文本頁。但在實(shí)際實(shí)驗(yàn)后發(fā)現(xiàn)頁面仍會被清空。七、 個人體會我在課程學(xué)習(xí)階段對中斷向量的駐留理解不夠深刻,經(jīng)過這一周對屏幕保護(hù)程序的研究,我對中斷向量的駐留及圖形處理有了較深刻的了解、認(rèn)識。我在動畫繪制函數(shù)中遇到了一些特別奇怪的錯誤,總不能得到正確的圖像浪費(fèi)了很多時間。后來在排查時,發(fā)現(xiàn)所有變量前都忘記添加跨越段前綴 CS:XX,這讓我想到作為計(jì)算機(jī)系的學(xué)生,正因?yàn)槲覀兯械墓ぷ魅蒎e性都很低,所以更需要加倍得細(xì)心,每一個細(xì)節(jié)都可能會成為限制我們發(fā)展上限的潛在敵人。通過這一周的匯編課程設(shè)計(jì),我也克服了對匯編程序的恐懼,在合理分塊的前提下,哪怕是匯編程序這樣低級、靈活的語言,也能一步步實(shí)現(xiàn)所有設(shè)計(jì)的功能;而且正是因?yàn)闆]有太多功能復(fù)雜的語句,只要實(shí)現(xiàn)進(jìn)行充分的思考和妥善的設(shè)計(jì),程序在邏輯上出錯的幾率非8常小,排錯并沒有高級語言這么難(當(dāng)然要建立在熟練掌握每種語句的用法的基礎(chǔ)上) 。八、 參考文獻(xiàn)1. 沈美明, 溫冬嬋. IBM-PC 匯編語言程序設(shè)計(jì)(第二版)M. 北京.清華大學(xué)出版社: 20142. 黃向明. 多頁動畫技術(shù)J. 微電腦世界,1996,07:71.九、 程序清單;清屏宏CLRSCREEN MACROLOCAL LOOPR,LOOPCM

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論