




已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
中國(guó)農(nóng)業(yè)大學(xué)課程設(shè)計(jì)報(bào)告(2015-2016 學(xué)年夏季學(xué)期)設(shè)計(jì)題目: DOS 下屏保程序設(shè)計(jì)實(shí)現(xiàn) 課程名稱: 匯編語(yǔ)言課程設(shè)計(jì) 任課教師: 沈翠華 班 級(jí): 計(jì)算機(jī) 141 學(xué) 號(hào): 1408010112 姓 名: 黃帥琪 成績(jī)目 錄一、 要求與需求分析 .11. 題目重述: .12. 需求分析: .1二、 程序設(shè)計(jì)分析: .11. 屏保繪制模塊 .11.1、 圖形錄入: .11.2、 動(dòng)畫(huà)繪制: .22. 非工作狀態(tài)計(jì)時(shí)模塊 .22.1、 計(jì)時(shí)功能: .22.2、 判斷是否處于工作狀態(tài) .23. 檢測(cè)鍵盤(pán)輸入模塊 .34. 中斷設(shè)置及內(nèi)存駐留程序 .3三、 程序流程圖 .31. 裝載程序: .32. 定時(shí)器中斷處理程序: .43. 鍵盤(pán)中斷處理程序: .44. 屏幕保護(hù)程序: .5四、 核心模塊功能介紹 .51. 裝載程序(INSTALL): .52. 更改后的計(jì)時(shí)器中斷(FUNCTIMER): .53. 更改后的鍵盤(pán)中斷(INT9): .64. 屏保程序(SCREENSAVER): .65. 屏保繪制模塊(PRINT): .66. 貼圖函數(shù)(ONEBITMAP/ZEROBITMAP): .67. 延時(shí)處理函數(shù)(ONEBITMAP/ZEROBITMAP): .68. 清屏宏(CLRSCREEN): .6五、 程序運(yùn)行步驟 .6六、 設(shè)計(jì)過(guò)程中遇到的主要技術(shù)難點(diǎn)及解決方案 .71. 中斷設(shè)置及駐留: .72. 工作狀態(tài)的判斷: .73. 動(dòng)畫(huà)的繪制: .74. 恢復(fù)原本工作狀態(tài): .7七、 個(gè)人體會(huì) .7八、 參考文獻(xiàn) .8九、 程序清單 .81DOS 下屏幕保護(hù)程序的設(shè)計(jì)與實(shí)現(xiàn)一、 要求與需求分析1. 題目重述:編寫(xiě)一個(gè) DOS 下的屏幕保護(hù)程序(也可以是 windows 下的屏保) 。該程序具有以下功能:在一段時(shí)間內(nèi)(如 1 分鐘)沒(méi)有任何鍵鍵入時(shí),程序自動(dòng)進(jìn)入屏保(一個(gè)圖畫(huà)一直在不斷的移動(dòng)顯示,圖案任意) ,直到按任意鍵結(jié)束。2. 需求分析:在未啟動(dòng)屏幕保護(hù)程序的情況下,當(dāng)長(zhǎng)時(shí)間不使用電腦的時(shí)顯示器屏幕的顯示換面長(zhǎng)時(shí)間不變,這將使屏幕發(fā)光器件疲勞、變色、甚至燒毀,最終使屏幕某個(gè)區(qū)域偏色或變暗。因此一個(gè)合格的屏幕保護(hù)程序應(yīng)滿足條件:1. 圖案動(dòng)態(tài)且在屏幕上的分布盡量均勻2. 當(dāng)停止工作后一段時(shí)間內(nèi)才進(jìn)入屏保3. 一旦按鍵后結(jié)束屏幕保護(hù)程序的繪制并恢復(fù)之前工作的內(nèi)容二、 程序設(shè)計(jì)分析:針對(duì)上述對(duì)于需求的分析,可將目標(biāo)程序分為三個(gè)功能模塊,即:屏保繪制模塊、非工作狀態(tài)計(jì)時(shí)模塊、檢測(cè)鍵盤(pán)輸入模塊。同時(shí)為了各個(gè)模塊正常工作,還需使用 DOS 功能設(shè)置中斷及將各功能模塊在內(nèi)存中駐留。1. 屏保繪制模塊1.1、 圖形錄入:ROM BIOS 顯示例程支持多種文本方式和圖形方式。在不同的顯示方式下屏幕顯示的像素分辨率、字符分辨率、顏色數(shù)等都不同。為更細(xì)致的展現(xiàn)動(dòng)畫(huà)細(xì)節(jié),本程序調(diào)用 INT10的 0 號(hào)子功能,選擇 320*200 分別率圖形 16 色顯示模式;并基于此模式將要顯示的像素圖轉(zhuǎn)化為相應(yīng)的顯存矩陣,每個(gè)像素點(diǎn)占用一個(gè)字節(jié)存儲(chǔ)顏色及亮度信息,存儲(chǔ)圖片共占用27*35 Byte。在圖形顯示時(shí)調(diào)用 INT10 的 5 號(hào)子功能將圖片置入顯存的相應(yīng)內(nèi)存區(qū)間。21.2、 動(dòng)畫(huà)繪制:本程序在繪制動(dòng)畫(huà)時(shí)考慮到動(dòng)畫(huà)的連貫性,使用了兩個(gè)顯存頁(yè)。一個(gè)顯存頁(yè)作為顯示頁(yè),另一個(gè)顯存頁(yè)作為后臺(tái)頁(yè),繪制圖像時(shí)僅僅對(duì)后臺(tái)頁(yè)執(zhí)行像素操作,顯示顯存頁(yè)。動(dòng)畫(huà)通過(guò)改變圖案的繪制位置實(shí)現(xiàn),當(dāng)圖案繪制觸及屏幕邊緣時(shí)改變繪圖方向,且繪制圖案鹿的方向與動(dòng)畫(huà)運(yùn)動(dòng)方向同向。動(dòng)畫(huà)繪制過(guò)程涉及以下變量作為參數(shù):當(dāng)前繪制頁(yè)數(shù)(后臺(tái)頁(yè))RECENTPAGE、上一次繪制頁(yè)數(shù)(顯示頁(yè))LASTPAGE、當(dāng)前繪圖的頂點(diǎn)坐標(biāo) CURSORX, CURSORY;上一次的繪制坐標(biāo) LASTX,LASTY;橫向繪圖方向 DIRECX;縱向繪圖方向DIRECY;常量的水平繪制速度和垂直繪制速度 VX,VY。下面將詳細(xì)介紹動(dòng)畫(huà)繪制的過(guò)程。1. 通過(guò)交換 RECENTPAGE 與 LASTPAGE 的值,完成對(duì)后臺(tái)頁(yè)與顯示頁(yè)的頁(yè)碼的交換;2. 根據(jù) DIRECX 判斷繪圖方向,選擇調(diào)用貼圖函數(shù) ONEBITMAP 或 ZEROBITMAP 在后臺(tái)頁(yè)上以 CURSORX, CURSORY 為頂點(diǎn)繪制圖案。其中 ONEBITMAP 為每列從左到右向顯存錄入像素,ZEROBITMAP 為每列從右到左向顯存錄入數(shù)據(jù);3. 顯示繪制完成的后臺(tái)頁(yè)并將調(diào)用宏 CLRSCREEN 把原顯示頁(yè)清屏;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ì)時(shí)模塊2.1、 計(jì)時(shí)功能:由于計(jì)算機(jī)的 8259A 可編程中斷控制器以 18.2HZ 的頻率產(chǎn)生中斷信號(hào),每次 8259A 產(chǎn)生中斷信號(hào)時(shí) CPU 將處理 1CH 號(hào)中斷向量所指向的終端處理程序。本程序通過(guò)改變 1CH 號(hào)中斷處理程序?qū)崿F(xiàn)計(jì)時(shí)功能。在每次 1CH 號(hào)中斷發(fā)生時(shí),若判斷運(yùn)行標(biāo)志 FLAG 得屏保繪制程序未運(yùn)行,將定時(shí)計(jì)數(shù)變量 CLKCNT 減一,若 CLKCNT 歸零,則調(diào)用屏幕保護(hù)函數(shù)進(jìn)入屏保繪制過(guò)程。2.2、 判斷是否處于工作狀態(tài)在 DOS 環(huán)境下,可認(rèn)為當(dāng)無(wú)字符輸入時(shí)為非工作狀態(tài)。因此本程序通過(guò)改變鍵盤(pán)中斷處理程序?qū)崿F(xiàn)非工作狀態(tài)的計(jì)時(shí)。具體實(shí)現(xiàn)方法為每次有鍵盤(pán)輸入時(shí)將定時(shí)計(jì)數(shù)變量CLKCNT 復(fù)位,對(duì)非工作狀態(tài)重新計(jì)時(shí)并調(diào)用原鍵盤(pán)中斷處理函數(shù)。33. 檢測(cè)鍵盤(pán)輸入模塊該模塊功能為當(dāng)屏保繪制時(shí)若有按鍵輸入,則結(jié)束屏保繪制并返回原工作界面。在具體實(shí)現(xiàn)上調(diào)用 INT16H 的 1 號(hào)子功能讀鍵盤(pán)緩沖區(qū)字符,若緩存區(qū)存在字符,結(jié)束屏保的繪制,返回文字顯示方式并顯示原工作頁(yè)的緩存。4. 中斷設(shè)置及內(nèi)存駐留程序該程序作用為設(shè)置中斷及把上述所有模塊在內(nèi)存中駐留,即裝載程序。調(diào)用 INT 21H的 35H 號(hào)子功能保存鍵盤(pán)中斷的原中斷向量到 SAVINT9,調(diào)用 INT 21H 的 25H 號(hào)子功能將非計(jì)時(shí)器中斷及鍵盤(pán)中斷重置為工作狀態(tài)計(jì)時(shí)模塊中的相應(yīng)程序。利用宏操作 PROLEN EQU $-FUNCTIMER 計(jì)算屏保程序占用內(nèi)存的字節(jié)數(shù),調(diào)用 INT 21H 的 31H 號(hào)子功能完成內(nèi)存駐留。三、 程序流程圖1. 裝載程序:42. 定時(shí)器中斷處理程序:3. 鍵盤(pán)中斷處理程序:54. 屏幕保護(hù)程序:四、 核心模塊功能介紹1. 裝載程序(INSTALL):完成修改中斷計(jì)時(shí)器(FUNCTIMER)和鍵盤(pán)(INT9) 的中斷向量,改變中斷屏蔽,實(shí)現(xiàn)屏保程序的駐留。2. 更改后的計(jì)時(shí)器中斷(FUNCTIMER):對(duì)非工作狀態(tài)計(jì)時(shí);調(diào)用屏保程序(SCREENSAVER)。63. 更改后的鍵盤(pán)中斷(INT9):若回到工作狀態(tài),將計(jì)時(shí)器變量復(fù)位。繼承了原鍵盤(pán)中斷的其他功能。4. 屏保程序(SCREENSAVER):設(shè)置初始值,控制整個(gè)屏保繪制過(guò)程。5. 屏保繪制模塊(PRINT):確定圖片像素信息寫(xiě)入顯存位置,計(jì)算每次貼圖的頂點(diǎn)位置,實(shí)現(xiàn)動(dòng)畫(huà)的產(chǎn)生。6. 貼圖函數(shù)(ONEBITMAP/ZEROBITMAP):屏保繪制模塊(PRINT)的子函數(shù),根據(jù)獲取的頂點(diǎn)位置進(jìn)行貼圖。ONEBITMAP 與ZEROBITMAP 的區(qū)別為貼圖的橫向方向不同。7. 延時(shí)處理函數(shù)(ONEBITMAP/ZEROBITMAP):屏保繪制模塊(PRINT)的子函數(shù),起到延時(shí)貼圖的作用,讓動(dòng)畫(huà)能流暢顯現(xiàn)。8. 清屏宏(CLRSCREEN):清除將要繪制的頁(yè)碼上的像素。五、 程序運(yùn)行步驟1. 在 DOS 環(huán)境下運(yùn)行裝載程序,將程序駐留在內(nèi)存中;2. 若在五秒內(nèi)沒(méi)有任何鍵鍵入時(shí),程序自動(dòng)進(jìn)入屏保,繪制一只跳動(dòng)的小鹿;3. 在屏保繪制狀態(tài)下任何鍵鍵入時(shí)返回原工作狀態(tài)。7六、 設(shè)計(jì)過(guò)程中遇到的主要技術(shù)難點(diǎn)及解決方案1. 中斷設(shè)置及駐留:使用宏操作 PROLEN EQU $-FUNCTIMER(FUNCTIMER 為駐留區(qū)的首地址, PROLEN 在程序末尾)計(jì)算屏保程序占用內(nèi)存的字節(jié)數(shù),調(diào)用 INT 21H 的 31H 號(hào)子功能完成內(nèi)存駐留。其中屏保程序中所用到的所有數(shù)據(jù)及變量等一并寫(xiě)入代碼段,而非數(shù)據(jù)段,以實(shí)現(xiàn)同步駐留。2. 工作狀態(tài)的判斷:更改鍵盤(pán)中斷,使鍵盤(pán)每次發(fā)生中斷時(shí)(即觸發(fā)按鍵)都對(duì)非工作狀態(tài)的計(jì)時(shí)復(fù)位。3. 動(dòng)畫(huà)的繪制:為消除動(dòng)畫(huà)設(shè)計(jì)時(shí)的圖像閃爍的,本程序使用多頁(yè)動(dòng)畫(huà)技術(shù)。多頁(yè)動(dòng)畫(huà)是通過(guò)使用頁(yè)切換技術(shù)實(shí)現(xiàn)的。頁(yè)切換改變顯示頁(yè)以繪制出給定動(dòng)畫(huà)序列的相鄰幀。由于圖像通常繪制在不同的頁(yè)上( 不是當(dāng)前可見(jiàn)頁(yè)),用戶不會(huì)看到圖像被繪制或擦除,從而產(chǎn)生高質(zhì)量的動(dòng)畫(huà)而沒(méi)有圖像閃爍。4. 恢復(fù)原本工作狀態(tài):本問(wèn)題暫未解決。設(shè)想中的解決方案是將原本的文本顯存頁(yè)保存起來(lái),動(dòng)畫(huà)繪制操作選擇其他的頁(yè)面進(jìn)行,在結(jié)束繪制后調(diào)用 INT 10H 的 0 號(hào)子功能重新顯示原文本頁(yè)。但在實(shí)際實(shí)驗(yàn)后發(fā)現(xiàn)頁(yè)面仍會(huì)被清空。七、 個(gè)人體會(huì)我在課程學(xué)習(xí)階段對(duì)中斷向量的駐留理解不夠深刻,經(jīng)過(guò)這一周對(duì)屏幕保護(hù)程序的研究,我對(duì)中斷向量的駐留及圖形處理有了較深刻的了解、認(rèn)識(shí)。我在動(dòng)畫(huà)繪制函數(shù)中遇到了一些特別奇怪的錯(cuò)誤,總不能得到正確的圖像浪費(fèi)了很多時(shí)間。后來(lái)在排查時(shí),發(fā)現(xiàn)所有變量前都忘記添加跨越段前綴 CS:XX,這讓我想到作為計(jì)算機(jī)系的學(xué)生,正因?yàn)槲覀兯械墓ぷ魅蒎e(cuò)性都很低,所以更需要加倍得細(xì)心,每一個(gè)細(xì)節(jié)都可能會(huì)成為限制我們發(fā)展上限的潛在敵人。通過(guò)這一周的匯編課程設(shè)計(jì),我也克服了對(duì)匯編程序的恐懼,在合理分塊的前提下,哪怕是匯編程序這樣低級(jí)、靈活的語(yǔ)言,也能一步步實(shí)現(xiàn)所有設(shè)計(jì)的功能;而且正是因?yàn)闆](méi)有太多功能復(fù)雜的語(yǔ)句,只要實(shí)現(xiàn)進(jìn)行充分的思考和妥善的設(shè)計(jì),程序在邏輯上出錯(cuò)的幾率非8常小,排錯(cuò)并沒(méi)有高級(jí)語(yǔ)言這么難(當(dāng)然要建立在熟練掌握每種語(yǔ)句的用法的基礎(chǔ)上) 。八、 參考文獻(xiàn)1. 沈美明, 溫冬嬋. IBM-PC 匯編語(yǔ)言程序設(shè)計(jì)(第二版)M. 北京.清華大學(xué)出版社: 20142. 黃向明. 多頁(yè)動(dòng)畫(huà)技術(shù)J. 微電腦世界,1996,07:71.九、 程序清單;清屏宏CLRSCREEN MACROLOCAL LOOPR,LOOPCM
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 線上按摩技師合同范本
- 農(nóng)村道路改造合同范例
- 人工井樁合同范本
- 中央合同范本
- 農(nóng)村地皮合同范例
- 產(chǎn)勞動(dòng)合同范本
- 農(nóng)家果園轉(zhuǎn)讓合同范本
- 分段付款合同范例
- 單位購(gòu)置電腦合同范本
- 公司合作框架合同范本
- 部編版小學(xué)(2024版)小學(xué)道德與法治一年級(jí)下冊(cè)《有個(gè)新目標(biāo)》-第一課時(shí)教學(xué)課件
- 稅法(第5版) 課件 第13章 印花稅
- 2025年山東鋁業(yè)職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2024年湖南汽車(chē)工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- (正式版)HGT 6313-2024 化工園區(qū)智慧化評(píng)價(jià)導(dǎo)則
- 二級(jí)公立醫(yī)院績(jī)效考核三級(jí)手術(shù)目錄(2020版)
- 地球上的大氣知識(shí)結(jié)構(gòu)圖
- 加油站數(shù)質(zhì)量管理考核辦法版.doc
- 華文版四年級(jí)下冊(cè)全冊(cè)書(shū)法教案
- 最新整理自動(dòng)化儀表專業(yè)英語(yǔ)詞匯只是分享
- 強(qiáng)夯、堆載預(yù)壓地基處理方案
評(píng)論
0/150
提交評(píng)論