您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 微机接口研究性教学专题三简单动画程序设计
学号:微机接口研究性教学专题三题目名称(题目2)简单动画设计学院电信学院班级通信1111班教师付文秀1一概述1.课程设计的目的对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。培养学生综合运用所学知识独立完成汇编程序课题的能力。使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。2.课程设计的要求利用BIOS系统功能调用,进行简单的动画设计,并根据以下提示信息进行选择:1――小鸟从屏幕飞过;2――汽车按水平方向从屏幕上“开”过去;3――退出提高要求:加入音乐播放。二方案设计1.主程序设计思想:此动画程序要求结构化的显示两个动画效果:小鸟飞过和小车开过。程序要求能多次执行以上两种动画并有退出选项。则我们可以设计三个选项以供用户选择:1-小鸟、2-小车和q-退出程序。三个选项分别可以用三个过程实现其功能。动画的原理实质上是在屏幕上连续的间隔较小的地方显示相同的图案。2由于人眼具有视觉暂留的特性,我们就会看到“运动”的画面。2.小鸟及汽车图案和加入音乐设计思想:首先讨论小鸟图像形成及移动部分的方案。我们通过查阅资料,决定以一组字符组合来形成小鸟图像(即文本方式),用字符形成小鸟图像,主要是利用BIOS中的INT10H中断,即显示器中断,INT10H中的09H号功能是在光标制定位置处写字符和属性。程序结构图大致如下:MOVAH,09H;置光标MOVAL,‘字符’;字符ASCII码MOVBL,7;字符属性MOVBH,0;第0页MOVCX,数量值;字符重复个数INT10H汽车图形由7个文本字符组成,从左到右,车体是由字母R(ASCII码为52H),1/2阴影符(ASCII码为B1H),和两个实心方块(ASCII码为DBH)组成,两个车轮是字母O(ASCII码为4FH),和笑脸符号(ASCII码为02H),以上七个文本字符都是以正常属性显示。汽车各字符的相对位移量如图2.2:开始显示车体,R是显示的第一个字符,其相对位移量定为(0,0),第二个阴影符号在R的右边一列,所以相对R的位移量为(0,1),两个实心方块都是在前一个字符的同一行的右边一列,所以位移量都为(0,1)。前轮比最后一个方块符号的行数加1,但仍在同一列上,所以它的位移量为(1,0),后轮相对前轮行数不变,但列数减了3,所以位移量应是(0,-3)。最后显示出笑脸,是相对于后轮位移量是(-2,1)。如汽车图形可定义变量定义如下:CARDB7R(0,0)(0,-3)(0,1)(0,1)(1,0)(0,1)(-2,1)图2.2汽车字符表3DB52H,7,0,0;字符R的ASCII码,及字符属性值为7,相对位移量为0,0DB0B1H,7,0,1;阴影符的ASCII码,及字符属性值为7,相对位移量为0,1DB0DBH,7,0,1;实心方块的ASCII码,及字符属性值为7,相对位移量为0,1DB0DBH,7,0,1;实心方块的ASCII码,及字符属性值为7,相对位移量为0,1DB4FH,7,1,0;大写字母O的ASCII码,及字符属性值为7,相对位移量为1,0DB4FH,7,0,-3;大写字母O的ASCII码,及字符属性值为7,相对位移量为0,-3DB02H,7,-2,1加入音乐程序也是一个比较重要的环节,我们尝试了好听的音乐,未成功,所以这里采用了产生指定频率声音,中间涉及到扬声器发声部分。我们采用了定时器控制。产生指定频率声音的程序段如下:PUSHAX;保存ax的值MOVAL,0B6H;给2号定时器的43端口送入一个特定的数0B6HOUT43H,ALMOVAX,34DCHDIVBXOUT42H,AL;给42H端口装入一个16位的计时常数(533H*896/频率)MOVAL,AHOUT42H,ALINAL,61H;获取61h端口的当前值ORAL,03H;把61h端口低二位置1,即打开蜂鸣器OUT61H,AL;输出数据到61h端口POPAX;恢复ax的值主程序:4CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAH,0MOVAL,4;设置显示方式为320*200彩色图形方式INT10HLEADX,STRINGMOVAH,9;在显示器上显示字符串提示信息INT21HMOVAH,1INT21H;从键盘读取字符到AL寄存器CMPAL,‘1’;比较AL是否等于1JNEA;不相等则转移到ACALLxiao;相等则调用xiao子程序A:CMPAL,32H;比较AL是否等于2JNEB;不相等则转移到BCALLqiche;相等则调用qiche子程序B:CMPAL,’q’;比较AL是否等于qJNESTART;不相等则转移到START,重新输入字符MOVAH,4CH;相等则终止当前程序。INT21H主程序主要实现与用户的交互,首先程序会提示用户想要进行什么操作。是显示小鸟动画、汽车动画还是退出。这里对应的给用户提供的选项是“1”、“2”和“q”。当用户输入他们的选项之后,主程序要判断用户的输入调用相应的功能模块来满足用户的要求。我们假设用户输入字符为X,那么首先我们将X与“1”比较。如果相同则程序调用小鸟动画模块为用户显示动画。若不为“1”则要继续与“2”想比较。相等则调用汽车动画,不等则继续与“q”想比较。相等则正常退出,不等则说明用户输入非法字符主程序返回到选择界面用户可以继续选择。特别说明:汇编语言的选择结构不同于C语言的选择结构,程序设计过程中要特别小心。避免将造成潜在的BUG.2)清屏宏定义5CLEARMACROpch,pcl,pdh,pdl,pbh;清屏宏定义MOVAH,0MOVAL,4INT10HMOVAH,6;调用6号功能MOVAL,0;设置整个屏幕为空白MOVCH,pchMOVCL,pcl;窗口左上角(0行,0列)MOVDH,pdhMOVDL,pdl;窗口右下角(24行,79列)MOVBH,pbh;正常属性显示INT10HENDM宏定义分为带参宏定义与无参宏定义。宏定义的功能旨在减少代码量和提高程序的结构化程度。一个定义好的宏可以在程序中被多次调用,从而增加了程序员和程序本身的效率。其中,无参宏定义的格式为:宏名MACRO宏体ENDM带参宏定义的格式为:宏名MACRO形参1,形参2宏体ENDM它们的调用格式为:宏名[实参]清屏宏为一个带有五个参数的带参宏。它的功能是将屏幕中一定区域的内容清楚,为接下的显示提供屏幕空间。要想进行显示操作就要了解BIOS(INT10H)调用。清屏宏中用到了六号功能调用:6号功能:初始窗口或向上滚动入口参数:AH=6,AL=上滚行数(AL=0时,整个屏幕为空白)CX=上滚窗口左上角的行、列号DX=上滚窗口右下角的行、列号6BH=空白行的属性出口参数:无在清屏宏的五个参数中,pch和pcl的值分别赋给CH和CL寄存器,这样所要清屏区域的左上角的坐标就设置好了。同样,将pdh和pdl的值赋给DH和DL寄存器,设置好右下角的坐标。BH寄存器取得pbh的值设置空白行的属性。最后INT10h,调用BIOS显示设置实现清屏功能。三流程设计和程序编写1.主程序流程图如图3.1:2.源程序代码源代码:DATASEGMENTINFO1DB0DH,0AH,'INPUT1,2,ORq:(1:bird,2:car,q:exit)$'BUFADB200DB?DB200DUP(0)图3.1主程序流程图t图7BUFBDB200DUP(?)CARDB7;小汽车的字符图形表DB52H,7,0,0DB0B1H,7,0,1DB0DBH,7,0,1DB0DBH,7,0,1DB4FH,7,1,0DB4FH,7,0,-3DB2,7,-2,1CHAR_CNTDW?POINTERDW?LINE_ONDB?COL_ONDB?ZONGZUOBIAODB13,13,11,10,10,9,20,6,9,5,3,2,1,9,19,9,10,11,11,11,12,13,14;小鸟的字符图形表HENGZUOBIAODB1,2,3,4,5,6,6,7,7,8,9,10,11,12,12,13,14,15,16,17,18,19,20SHULIANGDB2,4,6,7,7,8,3,1,14,18,20,20,23,7,4,6,5,4,4,4,3,2,1FLAGDW0YIDONGDB0YANSHIDW0DATAENDSSTACKSEGMENTstackDB200DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKstart:movax,datamovds,axmovah,0;设置显示方式为320*200彩色图形方式moval,3int10hleadx,info1;在显示器上显示字符串提示信息movah,9int21hmovah,0;从键盘读取字符到AL寄存器int16hCMPAL,31H;比较AL是否等于1JNEACALLXIAOA:CMPAL,32H;比较AL是否等于2JNEBCALLQICHEB:CMPAL,71H;比较AL是否等于qJNESTART8MOVAH,4CH;终止当前程序并返回调用程序INT21HCLEARMACROpch,pcl,pdh,pdl,pbh;清屏宏定义MOVAH,0MOVAL,4INT10HMOVAH,6;调用6号功能MOVAL,0;设置整个屏幕为空白MOVCH,pchMOVCL,pcl;窗口左上角(0行,0列)MOVDH,pdhMOVDL,pdl;窗口右下角(24行,79列)MOVBH,pbh;正常属性显示INT10HENDMxiaoproc;小鸟子程序PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVFLAG,0MOVYIDONG,70;描绘小鸟图像LOOP4:MOVAH,02H;设置光标位置LEABX,HENGZUOBIAOMOVCX,FLAGADDBX,CXMOVDH,[BX];DH代表行号LEABX,ZONGZUOBIAOADDBX,CXMOVDL,[BX];DL代表列号ADDDL,YIDONGMOVBH,0;表示页号INT10HMOVAH,09H;在当前光标位置处写字符和属性MOVAL,76H;设置字符ASCII码LEABX,SHULIANGMOVDX,FLAGADDBX,DX9MOVCL,[BX];CX代表写入字符数MOVCH,0MOVBH,0MOVBL,16H;字符属性INT10HINCFLAGCMPFLAG,22;表示要写23次JNALOOP4;JMPLOOP3Fasheng:;发声程序MOVAL,0B6HOUT43H,ALMOVAX,34DCHMOVDX,12HDIVBXOUT42H,ALMOVAL,AHOUT42H,ALINAL,61HORAL,03HOUT61H,ALLOOP3:MOVFLAG,0;小鸟飞行程序LOOP2:MOVAH,02H;置光标位置LEABX,HENGZUOBIAOMOVCX,FLAGADDBX,CXMOVDH,[BX]LEABX,ZONGZUOBIAOADDBX,CXMOVDL,[BX]ADDDL,YIDONG;纵坐标(相当于列)加上40MOVBH,0;选择在第0页INT10HMOVAH,09H;在当前光标位置处写字符和属性MOVAL,76H;字符的A
本文标题:微机接口研究性教学专题三简单动画程序设计
链接地址:https://www.777doc.com/doc-3188290 .html