DOS下屏保程序設計實現課程設計_第1頁
DOS下屏保程序設計實現課程設計_第2頁
DOS下屏保程序設計實現課程設計_第3頁
DOS下屏保程序設計實現課程設計_第4頁
DOS下屏保程序設計實現課程設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論