简易动画程序设计汇编课程设计.docx
《简易动画程序设计汇编课程设计.docx》由会员分享,可在线阅读,更多相关《简易动画程序设计汇编课程设计.docx(23页珍藏版)》请在冰点文库上搜索。
简易动画程序设计汇编课程设计
目录
1、设计原理···············································································································1
1.1设计要求················································································································1
1.2设计目的················································································································1
1.3设计原理················································································································1
1.3.1DOS功能中的键盘输入··············································································1
1.3.2DOS功能中的屏幕输出············································································1
1.3.3BIOS中的键盘输入·····················································································1
1.3.4BIOS中的屏幕操作功能·············································································1
1.3.5鼠标中断的常用功能····················································································2
1.3.6文本显示方式································································································2
2、课程设计任务·······································································································3
2.1课程设计题目及要求····························································································3
2.1.1题目··············································································································3
2.1.2要求··············································································································3
2.2课程设计任务及工作量的要求············································································4
2.2.1设计任务······································································································4
2.2.2工作量的要求······························································································4
3、设计的程序流程图·······························································································4
3.1鼠标点击进入的流程图························································································4
3.2小女孩头像移动出现的流程图············································································4
3.3小女孩可爱地眨眼的流程图················································································4
3.4总体流程图············································································································4
4、屏幕输出各效果的实现·······················································································4
4.1小女孩头像的实现································································································4
4.2小女孩头像移动出现的实现················································································5
4.3小女孩可爱地眨眼的实现····················································································5
4.4鼠标点击进入动画的实现····················································································6
4.5全部代码················································································································7
5、生成效果及简单流程介绍···················································································7
6、小结与体会···········································································································7
7、参考文献···············································································································8
8、附录1·······················································································································9
9、附录2······················································································································10
简易动画程序设计
1、设计原理
1.1设计要求
在学习《微机原理及接口技术》课程的基础上,进一步深入理解以8086为代表的通用微机的结构、工作原理和应用技术,提高微机控制系统的设计、研发能力;按照教学计划的要求,利用一周时间,综合应用所学知识,设计具有一定功能的小型微机测控系统,培养学生一定的自学能力和独立分析问题、解决问题的能力,要求学生能通过独立思考、查阅工具书、参考文献,提出自己的设计方案,找出设计中遇到问题的解决途径。
1.2设计目的
为了提高效率和充分利用机器的性能,人们都喜欢使用汇编语言解决各自面临的问题,尤其是应用中增加一些图形和音乐会使界面更加生动,增加动感,达到赏心悦目的效果,由汇编语言编写的程序可以被其它高级语言很方便地调用,因此倍受软件设计工作者所青睐。
1.3设计原理
1.3.1DOS功能中的键盘输入
键盘输入是一种最常用的输入方式,所以,在DOS操作系统中,提供了能实现各种键盘输入的功能(Windows操作系统中仍然能用)。
INT21H中的相关功能如下:
01H——带回显的键盘输入
06H——控制台的输入/输出:
当DL=0FFH,表示键盘输入
07H——不回显、不过滤的键盘输入
08H——不回显的键盘输入
0AH——键盘输入字符串
0BH——检查键盘输入状态
0CH——清除输入缓冲区的输入功能
1.3.2DOS功能中的屏幕输出
屏幕输出是最常用的一种输出形式,DOS操作系统提供了几种实现屏幕输出的功能调用。
INT21H中的相关功能如下:
02H——显示的字符
06H——控制台的输入/输出:
当DL≠0FFH,表示显示字符
09H——在屏幕上显示一个字符串
1.3.3BIOS中的键盘输入
在BIOS系统中,提供了中断16H来实现键盘输入功能。
其具体的功能如下:
00H、10H——从键盘读一个字符,输入字符不回显
01H、11H——判断键盘缓冲区内是否有字符可读
02H——读取当前键盘状态字
1.3.4BIOS中的屏幕操作功能
BIOS系统提供了中断10H来实现各种屏幕处理功能。
其具体的功能如下:
00H——设置显示器模式
01H——设置光标形状
02H——设置光标位置
03H——读取光标信息
05H——设置显示页
06H、07H——初始化或滚屏(向上滚屏和向下滚屏)
08H——读光标处的字符及其属性
09H——在当前光标处按指定属性显示字符
0AH——在当前光标处显示字符
0CH——写图形象素
0DH——读图形象素
0EH——在Teletype模式下显示字符
0FH——读取显示器模式
10H——颜色
13H——在Teletype模式下显示字符串
1.3.5鼠标中断的常用功能
BIOS系统提供了中断33H来实现鼠标中断功能,其常用的功能如下:
00H—初始化鼠标
01H—显示鼠标指针
02H—隐藏鼠标指针
03H—读取鼠标位置及其按钮状态
04H—设置鼠标指针位置
05H—读取鼠标按键信息
06H—读取鼠标按钮释放信息
07H—设置鼠标水平边界
08H—设置鼠标垂直边界
09H—设置图形鼠标形状
0AH—设置本文鼠标形状
0BH—读取鼠标移动计数
0CH—为鼠标事件设置处理程序
0FH—设置鼠标计数与象素比
10H—设置鼠标指针隐藏区域
14H—替换鼠标事件中断
18H—为鼠标事件设置替换处理程序
19H—读取替换处理程序的地址
1DH—为鼠标指针选择显示页
1EH—读取鼠标指针的显示页
1.3.6文本显示方式
文本显示方式是指以字符为最小单位的显示方式,每个字符都是以矩形块形式显示的。
在BIOSROM中存有多种不同大小的字符集,主要的显示字符集大小为:
8×8(标准)、8×14和8×16等。
在常用的文本显示模式(模式3)下,屏幕被划分成25行,每行可显示80个字符,所以,每屏最多可显示2000(80×25)个字符。
为了便于标识屏幕上的每个显示位置,我们就用其所在行和列来表示之,并规定:
屏幕的左上角坐标为(0,0),右下角坐标为(24,79)。
在显示字符时,用一个字节存储该字符的ASCII码,用另一个字节存储的显示属性,即:
显示颜色。
彩色显示器的字符显示属性定义如图1所示,有关颜色值的定义,请参阅下表1。
图1字符显示属性的定义
存储内容与显示位置的对应关系如图2所示。
图2存储内容与显示位置的对应关系示意图
表1彩色显示器的显示属性表
由上面的叙述可知:
在80×25的文本显示模式下,满屏可显示2000个字符,也就需要4000个字节来存储一屏的显示信息。
2、课程设计任务
2.1课程设计题目及要求
2.1.1题目
简易动画程序设计
2.1.2要求
(1)利用BIOS系统功能调用,进行简单的动画设计;
(2)利用BIOS系统功能中的10H、21H、33H、16H中断功能,进行简单的动画设计,并根据以下出现文字进行鼠标点击进行选择:
1:
SHIFT(小女孩头像移动出现)。
0:
CUTE(小女孩可爱地眨眼)。
(3)基本任务为必做项目,附加任务为选做项目;
(4)对课程设计进行总结,撰写课程设计报告。
2.2课程设计任务及工作量的要求
2.2.1设计任务
(1)基本任务:
利用BIOS系统功能中的10H、21H、33H、16H中断功能,实现“小女孩头像移动出现”或“小女孩可爱地眨眼”的任意一种动画显示。
(2)附加任务:
能够通过屏幕显示以下提示信息:
1:
SHIFT(小女孩头像移动出现)。
0:
CUTE(小女孩可爱地眨眼)。
能够通过鼠标点击做出选择,并实现相应动画图案的显示。
能够点击Esc按键退出屏幕。
2.2.2工作量要求
(1)设计的程序流程图;
(2)汇编语言源程序代码;
(3)系统运行结果符合课程设计要求。
3、设计的程序流程图
3.1鼠标点击进入的流程图
3.2小女孩头像移动出现的流程图
3.3小女孩可爱地眨眼的流程图
图3鼠标点击进入
图4小女孩头像移动出现
图5小女孩可爱地眨眼
3.4总体流程图
见附录1。
4、屏幕输出各效果的实现
4.1小女孩头像的实现
由于在80×25的文本显示模式下,满屏可显示2000个字符,也就需要4000个字节来存储一屏的显示信息。
于是可在记事本中将小女孩头像用2000个字符输出,如图3,图4所示。
而后将每个字符后分别加入显示颜色属性,将小女孩头像处的字符属性设置为"M",70H(白底黑字),将小女孩头像外的字符属性设置为".",77H(白底白字即隐藏)。
将睁眼的4000个字节存储在BUFF1中,将闭眼的4000个字节存储在BUFF3中。
BUFF1DB".",77H,".",77H,".",77H……70H,"#"……".",77H
BUFF3DB".",77H,".",77H,".",77H……70H,"#"……".",77H
图6小女孩睁眼图7小女孩闭眼
4.2小女孩头像移动出现的实现
C2:
MOVDL,0;显示位置从(0,0)开始
AGAIN1:
MOVBH,0;BH=页码
MOVCX,2000;CX=显示字符串长度
MOVDH,0
LEABP,BUFF1;ES:
BP=显示字符串的地址
MOVAL,2;AL=2——字符串中含显示字符和显示属性。
显示后,光标位置不变
MOVAH,13H
INT10H;调用中断10H之功能13H,在Teletype模式下显示字符串
CALLDELAY
ADDSI,1
MOVDX,SI
MOVAH,1
INT16H;检查是否有按键
JZAGAIN1;若无字符可读,则继续循环
MOVAH,0
INT16H
CMPAL,KBEsc
JNZAGAIN1;若按键不是Escape,则继续循环
JMPC4
4.3小女孩可爱地眨眼的实现
C3:
NOP
again:
MOVBH,0;BH=页码
MOVCX,2000;CX=显示字符串长度
MOVDH,0
MOVDL,1;显示位置从(0,0)开始
LEABP,BUFF1;ES:
BP=显示字符串的地址
MOVAL,2;AL=2——字符串中含显示字符和显示属性。
显示后,光标位置不变
MOVAH,13H
INT10H;调用中断10H之功能13H,在Teletype模式下显示字符串
CALLDELAY
MOVDH,0
MOVDL,1;显示位置从(0,0)开始
MOVBH,0;BH=页码
MOVCX,2000;CX=显示字符串长度
LEABP,BUFF3;ES:
BP=显示字符串的地址
MOVAL,2;AL=2——字符串中含显示字符和显示属性。
显示后,光标位置不变
MOVAH,13H
INT10H;调用中断10H之功能13H,在Teletype模式下显示字符串
CALLDELAY
CALLClear;清屏幕
MOVAH,1
INT16H;检查是否有按键
JZagain;若无字符可读,则继续循环
MOVAH,0
INT16H
CMPAL,KBEsc
JNZagain;若按键不是Escape,则继续循环
JMPC4
4.4鼠标点击进入动画的实现
首先将要输出的字符串存储起来如下所示:
XDB"PLEASECHOSE"SHIFT"OR"CUTE"!
$"
YDB"1:
SHIFT$"
ZDB"0:
CUTE$"
C1主要功能就是实现鼠标点击效果,将“1:
SHIFT”和“0:
CUTE”的坐标找到,用33H鼠标中断获得鼠标所在的坐标值存在CX,DX中,规定鼠标点击的范围即可在点击到此范围内时进行跳转,实现鼠标点击效果。
C1:
MOVAX,01H;显示鼠标
INT33H
CALLClear;清屏幕
MOVAH,9
MOVDX,OFFSETX
INT21H
MOVAH,9
MOVDX,OFFSETY
INT21H
MOVAH,9
MOVDX,OFFSETZ
INT21H
MOVCX,0
MOVDX,0
ANXIA:
MOVAX,03H;等待鼠标左键按下
INT33H
CMPBX,1
JNZANXIA
CMPCX,200
JLANXIA
CMPCX,250
JGANXIA
CMPDX,0
JLANXIA
CMPDX,10
JGK1
JMPC2
K1:
CMPDX,20
JGANXIA
JMPC3
MOVAX,02H
INT33H;隐藏鼠标指针
4.5全部代码
见附录2。
5、生成效果及简单流程介绍
(1)点击后缀名为.exe的生成文件,如图8所示的登陆选择界面。
图8所示的登陆选择界面
(2)用鼠标点击想要呈现的动画,若点击“1:
SHIFT”,进入小女孩头像移动出现的动画界面,如图9所示。
图9小女孩头像移动出现的动画界面
(3)若想退出,点击Esc可退出动画,关闭.exe文件。
(4)用鼠标点击想要呈现的动画,若点击“0:
CUTE”,进入小女孩可爱地眨眼的动画界面,如图10所示。
图10小女孩可爱地眨眼的动画界面
(5)若想退出,点击Esc可退出动画,关闭.exe文件。
6、小结与体会
这次课程设计老师允许自由定题,在课程设计开始的前一周,由于怀着对汇编很浓的兴趣,于是我提前开始试着编写了十个评委的计分器。
当编写完那会,课程设计的大部分内容本该结束了。
但是由于从一开始就听说有INT10H中断,一直怀有很大的兴趣,于是又开始研究。
所以我这次的课程设计是小女孩的头像移动和可爱的眨眼动画。
由于在课程设计周开始前我已经将大部分内容完成,所以在真正开始的时候,我又按照老师提的要求加了INT33H的鼠标中断,实现鼠标点击选择的功能。
虽然,前面的准备工作大多在晚上熬夜完成,很累,但是我也很开心。
当真正自己动手去实现自己原本以为完成不了的任务的时候,那份激动和喜悦是无法言语的。
当从不懂到硬着头皮来到一点点慢慢领悟,这样的过程也许以后我也会经常地遇到,希望自己也能像这次的课程设计一样勇敢地迈出第一步,在过程中一步步将问题解决,不急不躁。
7、参考文献
[1]陆红伟,微机原理实验与课程设计指导书,北京:
中国电力出版社,2006。
[2]戴梅萼等,微型计算机技术及应用(第4版),北京:
清华大学出版社,2008。
[3]杨季文等,80×86汇编语言程序设计教程,北京:
清华大学出版社,1998。
[4]周明德等,80×86的结构与汇编语言程序设计,北京:
清华大学出版社,1993。
[5]王爱英主编,计算机组成与结构,北京:
清华大学出版社,1995。
[6]PeterAbel,IBMPCAssemblyLanguageandProgramming(FourthEdition),北京:
清华大学出版社,1998。
8、附录1
图11总体流程图
9、附录2
.MODELSMALL,C
DATASEGMENT
KBEscEQU1BH
XDB"PLEASECHOSE"SHIFT"OR"CUTE"!
$"
YDB"1:
SHIFT$"
ZDB"0:
CUTE$"
BUFF1DB".",77H,".",77H,".",77H……70H,"#"……".",77H
BUFF3DB".",77H,".",77H,".",77H……70H,"#"……".",77H
DATAENDS
CODESEGMENT
.STARTUP
CALLClear;清屏幕
MOVAX,DS
MOVES,AX
C1:
MOVAX,01H;显示鼠标指针
INT33H
CALLClear;清屏幕
MOVAH,9
MOVDX,OFFSETX
INT21H
MOVAH,9
MOVDX,OFFSETY
INT21H