动画心控制汇编语言1 课程设计概述 11.1 设计目的 11.2 设计要求 12 设计内容 13 系统概要设计 24 程序详细设计 24.1 图形显示设计 24.2 主程序设计 34.3 子程序设计 55 程序调试 76 心得体会 8参考文献 8程序主要源代码 120
设计任务:设计一彩色动画的程序。一个颜色方框从四周向中间由大变小,并留下痕迹。中间位置出现一颗“红”心。
设计要求:(1)按任意键进入图形显示;
(2)按空格键重复出现“心”;
(3)按回车键将重复整个图形;
(4)按q键退出程序。作品完成情况:此次课程设计,通过自己查阅各种相关书籍,及向周围同学请教,和指导老师的逐一纠正,基本上算是达到了目标。在编写和调试的过程中,遇到了不少问题,因此也学到了不少。但程序还存在不足之处,还有待改进,由于本人能力有限,所以就到此为止了。120
动画心控制汇编语言
动画心控制
1 课程设计概述
根据学院统一安排,计算机科学与技术专业在计算机技术实验室进行了汇编课程设计,本人根据学院安排的集中学习的机会进行动画“心”控制系统的的设计和文档的撰写,熟悉并能熟练使用汇编语言,加强了对汇编等计算机语言的了解,对编程的知识也能较好地运用。
1.1 设计目的
汇编课程设计是计算机科学与技术专业的基础选修课的实践环节。本课程设计的主要目的是掌握汇编程序设计的基本方法,并掌握汇编程序设计中常见错误的排除和避免。提供一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力,从而进一步提高了实际运用的能力。
1.2 设计要求
(1)按任意键进入图形显示;
(2)按空格键重复出现“心”;
(3)按回车键将重复整个图形;
(4)按q键退出程序。
2 设计内容
设计一彩色动画的程序。一个颜色方框从四周向中间由大变小,并留下痕迹,中心位置出现一颗红“心”。
编写图形动画程序是程序设计中非常有趣和有价值的工作。以速度而论,汇编语言比高级语言处理指令的速度快得多。用汇编语言设计动画,更逼真、更有效。
图形动画显示的方式有两种:字符图形显示和点像素图形显示。本课程设计是采用点像素图形的动画显示方式而设计的。
3 系统概要设计
本程序主要是利用BIOS功能调用的10H中断类型实现的。 利用其12号功能,设置像素点的颜色、坐标和个数,从而画出图形需要的线段,如画方框、画斜线、画水平垂直线,以及采用行、列坐标连续写像素的方法填充图形等。画完图形之后延时,清屏。同时,利用DOS系统功能调用的08号功能,从键盘输入字符。如果是任意键,则进入图形显示;如果是回车键,则重新显示整个图形;如果是空格键,则改变“心”的大小;如果是“q”键,则退出。
4 程序详细设计
4.1 图形显示设计
由程序要实现的显示效果可见,程序中要引入多种图案,具体由方框、对角线、任意水平垂直线、“心”等来形成整个图案。所以要在程序中出现多次画各种图案来填充整个图形,具体步骤如下,其代码见后面关键代码。
(1)画方框,先是设置cx,dx,bx各个寄存器不同的初值,即设置像素点的颜色、坐标和个数,接着由大到小画方框,每画一个方框之前,各个寄存器都要设置不同的初值。
(2)画对角线,和画方框差不多,每画一条对角线之前各个寄存器也要设置不同的初值。
(3)画任意水平垂直线,画十字线之前,各个寄存器如cx,bx,dx也需设定不同的初值。
(4)再由大到小画方框,由程序要显示的效果来分析,还需再一次引入大大小小的方框,故还需要再一次由大到小画方框。
(5)填充,辅助图形画好以后,需要采用行、列坐标连续写像素的方法填充来图形,达到统一合成的效果。填充的代码如下:
call fill
call fill_2
call fill_3
mov cx,149
mov dx,120
mov al,2
mov bx,60
mov si,0
call draw_line
mov cx,151
mov dx,120
mov al,2
mov bx,60
mov si,0
call draw_line
(6)画“心”
由程序显示的效果来看,最关键的就是画“心”这个主要图形了。画“心”的步骤如下面代码所示:
heart_: ;画心
call cls_box
call heart
mov ah,08
int 21h
cmp al,'q'
jz ok
cmp al,20h
jz heart_
call clear
jmp sss
ok:
ret
4.2 主程序设计
该程序的结构流程图如下图1所示。若图片无法显示请联系QQ3710167,动画心控制汇编语言系统免费,转发请注明源于www.lwfree.cn
动画心控制汇编语言
结束图1 动画“心”程序结构图
先设置图形显示方式,用点像素形式来显示图形。接着设置背景色和彩色组,利用其12号功能,设置像素点的颜色、坐标和个数,从而画出图形所需要的线段,如画方框、画斜线、画水平垂直线,以及采用行、列坐标连续写像素的方法填充图形等。完成图形之后延时,清屏。同时,利用DOS系统功能调用的08号功能,从键盘输入字符。如果是任意键,则进入图形显示;如果是回车键,则重新显示整个图形;如果是空格键,则改变“心”的大小;如果是“q”键,则退出。
4.3 子程序设计
为了实现程序效果,程序中还调用了不少的子程序,如填充子程序、画线子程序、画“十”字线子程序、画方框子程序、画“心”子程序、延时子程序、清屏子程序。下面具体分析延时与清屏两子程序的设计。
(1)延时子程序
先push cx,dx,即先让cx,dx进栈,接着设置dx寄存器的初值为25,利用其12号功能设置cx的初值为2801,利用其13号功能使之循环。在进行循环次数计数(即dx←dx-1)后,判断循环是否结束:如(dx)≠0,继续循环,转移到目标地址d12所在的指令,否则顺序执行。然后dx,cx顺序出栈。最后返回。其流程图如下图2所示。
图2 延时子程序流程图
其延时子程序的关键代码如下:
delay proc near ;延时子程序
push cx
push dx
dl3:
loop dl3
dec dx
jnz dl2
pop dx
pop cx
ret
delay endp
(2)清屏子程序
先设置功能号al及寄存器bx,cx,dx的初值,接着进入line循环程序。在line循环程序中,先清除缓冲区并请求指定的输入功能,接着利用BIOS功能调用的10H中断类型实现显示器输出控制。。在进行循环次数计数(即cx←cx+1)后,判断循环是否结束:如(cx)≠320,则继续循环,转移到目标地址line所在的指令,否则再设置寄存器cx初值,在进行循环次数计数(即dx←dx+1)后,判断循环是否结束:如(dx)≠200,则继续循环,转移到目标地址line所在的指令,否则顺序执行。最后返回。其关键代码如下,清屏子程序的流程图如下图3所示。
clear proc near ;清屏子程序
mov al,0
mov bx,0
mov cx,0
mov dx,0
动画心控制汇编语言
line:
mov ah,0ch
int 10h
inc cx
cmp cx,320
cmp dx,200
jne line
ret
clear endp若图片无法显示请联系QQ3710167,动画心控制汇编语言系统免费,转发请注明源于www.lwfree.cn
图3 清屏子程序流程图
5 程序调试
在masm 集成环境中编译结果连接生成可执行文
图4 连接生成界面图
双击heart.exe,根据屏幕提示信息,按任意键,动画“心”图形开始显示,按空格重复出现“心”,按回车键重复整个图形,按q键退出程序。
6 心得体会
这次汇编语言课程设计结束了,我的收获很大。通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水平。
参考文献
[1] 李珍香,刘红梅,赵润林.汇编语言课程设计案例精编[M].北京:中国水利水电出版社,2004,4.
[2] 陆忠华.汇编语言程序设计[M].北京:科学出版社,1993.
[3] 迟成文,王保秀.汇编语言课程设计[M].北京:中国科学技术大学出版社,1993.
动画心控制汇编语言
程序主要源代码
call box ;draw the big box
mov cx,71
mov dx,21
mov bx,158
again: ;由大到小画方框
mov al,1
mov di,0
call box
call delay
mov al,0
mov di,0
call box
inc cx
inc dx
sub bx,2
cmp cx,94
jnz again
mov di,0 ;draw the 2nd box
mov cx,95
mov dx,45
mov al,1
mov bx,110
call box
mov cx,96
mov dx,46
mov bx,108
again_00:
mov al,1
mov di,0
call box
call delay
call delay
mov al,0
mov di,0
call box
inc cx
inc dx
sub bx,2
cmp cx,114
jnz again_00
mov cx,115 ;draw the 3rd box
mov dx,65
mov al,1
mov bx,70
call box
mov cx,116
mov dx,66
mov bx,68
again_01:
mov al,1
mov di,0
call box
call delay
call delay
mov al,0
mov di,0
call box
inc cx
inc dx
sub bx,2
cmp cx,129
jnz again_01
mov di,2
mov al,1 ;draw the small box
call box
mov di,2
mov al,3
mov si,0
mov cx,71
mov dx,21
mov bx,59
call xie_line ;对角线
mov cx,171
mov dx,121
mov bx,59
call xie_line
mov si,1
mov cx,71
mov dx,179
mov bx,59
动画心控制汇编语言
call xie_line
mov cx,171
mov dx,79
mov bx,59
call xie_line
mov cx,150
mov dx,20
mov si,0
mov bx,60
call draw_line ;十字线
mov cx,150
mov dx,120
mov bx,60
call draw_line
mov cx,70
mov dx,100
mov si,1
mov bx,60
call draw_line
mov cx,170
mov dx,100
mov bx,60
call draw_line
mov si,1
mov cx,70
mov dx,60
mov bx,60
call mid_line
mov cx,170
mov dx,110
mov bx,60
call mid_line
mov si,2
mov cx,110
mov dx,20
mov bx,30
call mid_line
mov cx,160
mov dx,120
mov bx,30
call mid_line
mov si,3
mov cx,70
mov dx,140
mov bx,60
call mid_line
mov cx,170
mov dx,90
mov bx,60
call mid_line
mov si,4
mov cx,110
mov dx,180
mov bx,30
call mid_line
mov cx,160
mov dx,80
mov bx,30
call mid_line
mov di,0
mov al,1 ;draw the big box again
mov cx,70
mov dx,20
mov bx,160
call box
mov di,0
mov al,1 ;再由大到小画方框
mov cx,130
mov dx,80
mov bx,40
需要完整内容的请联系QQ3710167,本文免费,转发请注明源于www.lwfree.cn
mov al,1
mov bx,110
call box
mov cx,115
mov dx,65
mov al,1
mov bx,70
call box
mov di,1