动画心汇编程序设计实验报告.docx
- 文档编号:10924824
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:48
- 大小:451.41KB
动画心汇编程序设计实验报告.docx
《动画心汇编程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《动画心汇编程序设计实验报告.docx(48页珍藏版)》请在冰点文库上搜索。
动画心汇编程序设计实验报告
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
动画心汇编程序设计
初始条件:
1、8086指令系统;2、DOS系统功能;3、8086汇编语言;4、程序设计方法以及一些技法。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求):
可爱小动画本动画先显示一些提示信息,然后按任意键进入,只见一个方框向中间由大变小,并留下痕迹,然后出现一个心,按空格重复出现心,按其他键将重复,按Q键退出程序。
提交课程设计报告(格式按学校规范要求),具体内容如下:
一、概述
二、设计任务及要求
三、程序设计基本思想
四、设计方案及程序流程图(若有两个备选方案,要进行比较分析)
五、程序源代码与运行结果(源代码附详细注释,屏幕截图或打印)
六、调试记录与分析(屏幕截图)
七、附录:
完整的程序源代码
八、参考文献
九、结语及致谢
时间安排:
2007年1月23日
查阅资料
2007年1月24日
方案设计
2007年1月25日~28日
编程
2007年1月29日~30日
调试程序
2007年1月31日
撰写微机原理课程设计报告
2007年2月1日~2日
答辩,提交报告
指导教师签名:
2007年1月22日
系主任(或责任教师)签名:
年月日
动画心汇编程序设计说明书
摘要:
此次微机原理课程说明书根据设计任务阐述动画心汇编程序的设计基本思想与方案,绘制程序流程图,运用8086CPU提供的指令、伪指令、宏指令及DOS,BIOS功能调用编写程序源代码,同时给出说明注释。
并利用计算机提供的软件调试工具对所编写程序进行调试,记录下整个调试分析的过程与运行结果。
关键词:
动画心、汇编语言、方案、程序原代码、调试。
目录:
1设计任务及要求…………………………………………………………………………3
2程序设计基本思想………………………………………………………………………3
2.1汇编程序设计过程…………………………………………………………………3
2.2本程序设计基本思路………………………………………………………………4
3设计方案及程序流程图…………………………………………………………………4
3.1设计方案与扩展……………………………………………………………………4
3.1.1方案……………………………………………………………………………4
3.1.2扩展……………………………………………………………………………4
3.2动画心程序流程图…………………………………………………………………5
4程序源代码与运行结果…………………………………………………………………6
4.1程序源代码…………………………………………………………………………6
4.2程序运行结果………………………………………………………………………17
5调试记录与分析…………………………………………………………………………21
6附录………………………………………………………………………………………23
7参考文献…………………………………………………………………………………42
8结语及致谢………………………………………………………………………………42
1设计任务及要求
本课程设计要求编写一个完整的程序以实现一个小动画。
该动画要求先显示一些提示信息,然后按任意键进入,只见一个方框向中间由大变小,并留下痕迹,然后出现一个心,按空格重复出现心,按其他键将重复,按Q键退出程序。
2程序设计基本思想
2.1汇编程序设计过程
一般汇编语言设计总过程流程图如下图1所示:
汇编语言程序设计要求综合以前所学知识,根据设计具体要求分析问题,将问题分解成一个一个的步骤,每步用汇编语言中的指令性语句,按先后顺序表达,设计一个不仅要满足要求,能正常运行,实现指定功能的程序;还应满足结构化、简明、易读、易调试、易维护、执行速度快、占用存储空间尽量少的好程序。
2.2本程序设计基本思路
本程序主要是利用BIOS功能调用的10H中断类型实现的。
利用其12号功能,设置像素的颜色、坐标和个数,从而画出图形需要的线段,如画方框、画对角线、画水平垂直线,以及采用行、列坐标连续写像素的方法填充图形等。
画完图形之后延时,清屏。
同时,利用DOS系统功能调用的08号功能,从键盘输入字符。
如果是任意键,则进入图形显示;如果是空格键,则改变“心”的大小;如果是其它键,则重新显示整个图形;如果是“q”键,则退出。
3设计方案及程序流程图
3.1设计方案与扩展
3.1.1方案
由基本设计思路拟订出原方案。
先分别编写画方框、画对角线、画水平垂直线,画斜线,画心型;以及清屏、清除心型、延时和显示文本信息的子程序。
然后,通过编写主程序调用这些子程序来实现设计的要求。
3.1.2扩展
扩展一:
通过改变BIOS功能调用的10H中断类型的11号功能(BL)的赋值来改变图形与线条以及背景的颜色。
扩展二:
将原设计任务要求的方框由大变小改成方框由小变大。
同时,也可改变方框变化划过的轨迹变化,使其不在是从大框一直到小框,而是从小框到大框;使改变后的方框变化看上去是移动的不断从小到大变化。
扩展三:
为了使运行的动画人眼看上去是连续移动的,我们可以根据人眼的反应时间来设置延时程序。
通过计算得出延时程序所需的循环的次数,以达到以上目的。
计算式为:
(人眼的反应时间:
响应时间如果超过40毫秒,人眼就会出现运动图像的迟滞现象。
)
以上扩展方案会在程序源代码中具体说明。
3.2动画心程序流程图
由设计方案画出动画心程序流程图如图2所示:
4程序源代码与运行结果
4.1程序源代码
根据程序设计基本思路与方案,由于小组的分工合作,在此主要负责编写主程序源代码与画斜线子程序源代码。
主程序:
datasegment
buff1db'Welcomeyoutorunthisprogram!
'
db''
db'*****Pleasepressanykey*****$'
buff2db'Myheartbeatswithyours!
'
db'*****Pleasepressqtoquit*****$'
dataends
stacksegmentstack;定义堆栈段
stackends
codesegment
mainprocfar
assumecs:
code,ds:
data
start:
pushds
subax,ax
pushax
movax,data
movds,ax
movah,00;设置显示方式为320*200彩色图形方式
moval,04
int10h
movah,0bh;利用BIOS调用的10H中断类型11号功能设定背景色
movbh,00
movbl,1;通过(bl)的赋值0-15设定颜色,此为蓝色
int10h
movah,0bh;设置彩色组
movbh,1
movbl,2
int10h
movdx,offsetbuff1;显示提示信息,即buff1的字符串内容
movah,09
int21h
movah,08;从键盘输入1个字符,但不送显示器显示
int21h
callclear;调用清屏子程序
sss:
calltext;显示文本信息
movdi,2;开始画大方框
moval,1
movcx,70;显示点所在列号
movdx,20;显示点所在行号
movbx,160;确定方框大小
callbox;调用画方框子程序
movcx,71;画方框移动轨迹,使方框变化看上去是移动的
movdx,21
movbx,158
again:
;由大到小画轨迹方框
moval,1
movdi,0
callbox
calldelay
moval,0
movdi,0
callbox
inccx;每次轨迹图的行号和列号是自加1,轨迹图是由大变小
incdx
subbx,2;设定每次轨迹图大小减小的程度
cmpcx,94;当轨迹方框大小与下一个方框相等时,退出画轨迹
jnzagain
movdi,0;画第二个方框,具体画法与画大方框相同
movcx,95
movdx,45
moval,1
movbx,110;第二个方框较第一个方框较小
callbox
movcx,96
movdx,46
movbx,108
again_00:
moval,1
movdi,0
callbox
calldelay
calldelay
moval,0
movdi,0
callbox
inccx
incdx
subbx,2
cmpcx,114
jnzagain_00
movcx,115;画第三个方框
movdx,65
moval,1
movbx,70;第三个方框较前两个小
callbox
movcx,116
movdx,66
movbx,68
again_01:
moval,1
movdi,0
callbox
calldelay
calldelay
moval,0
movdi,0
callbox
inccx
incdx
subbx,2
cmpcx,129
jnzagain_01
movdi,2;画最小的方框,此时不需要画轨迹图
moval,1
movcx,130
movdx,80
movbx,40
callbox
movdi,2;画对角线
moval,3
movsi,0
movcx,71;确定点所在列号
movdx,21;确定点所在行号
movbx,59;设置对角线长度
callxie_line;调用画对角线子程序
movcx,171
movdx,121
movbx,59
callxie_line
movsi,1
movcx,71
movdx,179
movbx,59
callxie_line
movcx,171
movdx,79
movbx,59
callxie_line
movcx,150;画十字线,确定点所在列号
movdx,20;确定点所在行号
movsi,0
movbx,60;确定十字线长度
calldraw_line;调用画线子程序
movcx,150
movdx,120
movbx,60
calldraw_line
movcx,70
movdx,100
movsi,1
movbx,60
calldraw_line
movcx,170
movdx,100
movbx,60
calldraw_line
movcx,149
movdx,120
moval,2
movbx,60
movsi,0
calldraw_line
movsi,1;画斜线
movcx,70
movdx,60
movbx,60
callmid_line;调用画斜线子程序
movcx,170;确定显示点所在列号
movdx,110;确定显示点所在行号
movbx,60;设置斜线长度
callmid_line
movsi,2
movcx,110
movdx,20
movbx,30
callmid_line
movcx,160
movdx,120
movbx,30
callmid_line
movsi,3
movcx,70
movdx,140
movbx,60
callmid_line
movcx,170
movdx,90
movbx,60
callmid_line
movsi,4
movcx,110
movdx,180
movbx,30
callmid_line
movcx,160
movdx,80
movbx,30
callmid_line
movcx,149
movdx,120
moval,2
movbx,60
movsi,0
calldraw_line
heart_:
;画心
callcls_box;清除最小方框内的内容/清除心
callheart;调用画心子程序
movah,08;从键盘输入一个字符,但不送显示器显示
int21h
cmpal,'q';(al)=’q’时,执行ok的内容,即退出
jzok
cmpal,20h;(al)=空格时,转去执行heart_的内容,即清除心并重新画心
jzheart_
callclear;(al)=其他键,则调用清屏子程序清屏
jmpsss;清屏后转去执行sss的内容,即动画重复
ok:
;退出分支程序
ret
mainendp;主程序结束
codeends
endstart
画斜线子程序:
Mid_lineprocnear
addbx,cx
cmpsi,2;比较si=2时,转去执行midline_2的内容
jzmidline_2
cmpsi,3;比较si=3时,转去执行midline_3的内容
jzmidline_3
cmpsi,4;比较si=4时,转去执行midline_4的内容
jzmidline_4
midline_1:
;画角度大于
,且斜率较小的斜线
movah,0ch;BIOS调用10H中断类型12号功能写点及着色
int10h
incdx;每次行坐标加1
addcx,2;每次列坐标加2
cmpcx,bx;比较cx与bx,相当与确定斜线的长度
jnemidline_1;
时继续画斜线
jmpexit_lines
midline_2:
;画角度小于
,且斜率较大的斜线
movah,0ch
int10h
adddx,2;每次行坐标加2
inccx;每次列坐标加1
cmpcx,bx
jnemidline_2
jmpexit_lines;画完斜线退出该子程序
midline_3:
;画角度小于
,且斜率较小的斜线
movah,0ch
int10h
decdx;每次行坐标减1
addcx,2;每次列坐标加2
cmpcx,bx
jnemidline_3
jmpexit_lines
midline_4:
;画角度大于
,且斜率较大的斜线
movah,0ch
int10h
subdx,2;每次行坐标减2
inccx;每次列坐标加1
cmpcx,bx
jnemidline_4
exit_lines:
;退出画斜线子程序
ret;返回主程序,结束中断
mid_lineendp;画斜线子程序结束
扩展程序:
改动程序使动画方框变化从由大变小改成方框变化由小变大,并同时改变运动轨迹的变化也是由小到大。
以下程序代码只写出需改动的一小段程序,其它不变与原程序相同。
movdi,2;先画最小的方框
moval,1
movcx,130;显示点所在列号
movdx,80;显示点所在行号
movbx,40;设定方框大小
callbox;调用画方框子程序
movcx,129
movdx,79
movbx,42
again:
;画方框由小变大的轨迹
moval,1
movdi,0
callbox
calldelay
moval,0
movdi,0
callbox
deccx;显示点列号减1
decdx;显示点行号减1
addbx,2;每个轨迹方框大小减2
cmpcx,116;轨迹方框与第三个方框重合时,退出画轨迹
jnzagain
movcx,115;画第三个方框
movdx,65
moval,1
movbx,70
callbox
movcx,114
movdx,64
movbx,72
again_01:
moval,1
movdi,0
callbox
calldelay
calldelay
moval,0
movdi,0
callbox
deccx
decdx
addbx,2
cmpcx,96
jnzagain_01
movdi,0;画第二个方框
movcx,95
movdx,45
moval,1
movbx,110
callbox
movcx,94
movdx,44
movbx,112
again_00:
moval,1
movdi,0
callbox
calldelay
calldelay
moval,0
movdi,0
callbox
deccx
decdx
addbx,2
cmpcx,71
jnzagain_00
movdi,2;画最大的方框,且不用画轨迹
moval,1
movcx,70
movdx,20
movbx,160
callbox
4.2程序运行结果
用编辑器输入编好的程序源代码转换成目标文件,再将目标文件连接生成可执行文件并运行该程序,得出程序运行结果。
原程序:
动画心画图程序运行结果如下列图所示:
图3运行结果图——显示提示信息
图4运行结果图——步骤一
图5运行结果图——步骤二
图6运行结果图——完整动画心图
运行结果文字描述:
运行编好后的程序,屏幕背景色为蓝色,先显示“Welcomeyoutorunthisprogram!
”“*****pleasepressanykey*****”的提示信息;按任意键后,出现“Myheartbestswithyours!
”“*****pleasepressqtoquit*****”的文本信息;然后出现方框连续的由大变小,并留下痕迹,再出现一个心;按空格键重复出现心,任意键重复整个动画。
改变颜色与方框大小后的程序运行结果如下:
图7扩展程序运行结果图——显示提示信息
图8扩展程序运行结果图——步骤一
图9扩展程序运行结果图——步骤二
图10扩展程序运行结果图——完整动画心图
运行结果文字描述:
运行编好后的程序,屏幕背景色为蓝色,先显示“Welcomeyoutorunthisprogram!
”“*****pleasepressanykey*****”的提示信息;按任意键后,出现“Myheartbestswithyours!
”“*****pleasepressqtoquit*****”的文本信息;然后出现方框连续的由小变大,并留下痕迹,再出现一个心;按空格键重复出现心,任意键重复整个动画。
5调试记录与分析
原程序调试过程:
根据设计原理先分别编写出画方框、画对角线、画水平垂直线,画斜线,画心型;以及清屏、清除心型、延时和显示文本信息的子程序;然后通过主程序调用每个子程序编写成可实现设计要求的完整程序。
先将程序转换成目标文件,系统没发现语法错误。
转换成目标文件屏幕截图如下图11所示:
图11转换成目标文件截图
将目标文件生连接生成可执行文件后,命令提示符显示“Therewas1errordetected.”系统发现存在一个错误,并提示“Warning:
NoSTACKsegment.”
没有定义堆栈段,程序可以不定义堆栈段,该错误可以忽略。
生成可执行文件的屏幕截图如下图12所示:
图12生成可执行文件截图
但为了不存在错误,我们在程序中定义一段堆栈段
stacksegmentstack
stackends
定义堆栈段后错误消失了,如下图13所示:
图13加入堆栈段后生成可执行文件截图
最后,运行程序得到我们所想要的结果,完成设计任务。
6附录
完整程序源代码:
datasegment
buff1db'Welcomeyoutorunthisprograme!
'
db''
db'*****Pleasepressanykey*****$'
buff2db'Myheartbeatswithyours!
'
db'*****Pleaseqtoquit*****$'
dataends
stacksegmentstack;定义堆栈段
stackends
codesegment
mainprocfar
assumecs:
code,ds:
data
start:
pushds
subax,ax
pushax
movax,data
movds,ax
movah,00;设置显示方式为320*200彩色图形方式
moval,04
int10h
movah,0bh;设置彩色组
movbh,00
movbl,1
int10h
movah,0bh
movbh,1
movbl,2
int10h
movdx,offsetbuff1;显示提示信息
movah,09
int21h
movah,08
int21h
callclear;清屏
sss:
calltext;显示文本
movdi,2
moval,1;画大方框
movcx,70
movdx,20
movbx,160
callbox
movcx,71
movdx,21
movbx,158
again:
moval,1
movdi,0
callbox
calldelay
moval,0
movdi,0
callbox
inccx
incdx
subbx,2
cmpcx,94
jnzagain
movdi,0;画第二个方框
movcx,95
movdx,45
moval,1
movbx,110
callbox
m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动画 汇编程序 设计 实验 报告