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

提交评论