




免费预览已结束,剩余37页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学微机原理与接口技术课程设计说明书课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 题 目: 动画心汇编程序设计 初始条件: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设计任务及要求32程序设计基本思想32.1汇编程序设计过程32.2本程序设计基本思路43设计方案及程序流程图43.1设计方案与扩展43.1.1方案43.1.2扩展43.2动画心程序流程图54程序源代码与运行结果64.1程序源代码64.2程序运行结果175调试记录与分析216附录237参考文献428结语及致谢421设计任务及要求本课程设计要求编写一个完整的程序以实现一个小动画。该动画要求先显示一些提示信息,然后按任意键进入,只见一个方框向中间由大变小,并留下痕迹,然后出现一个心,按空格重复出现心,按其他键将重复,按Q键退出程序。2程序设计基本思想2.1汇编程序设计过程一般汇编语言设计总过程流程图如下图1所示:给定问题描述问题计划解决步骤用汇编语言实现程序流程图流程图写出源程序用编辑器输入/编辑源程序汇编源程序文件用汇编器汇编程序语法错?目标模块YesNo用连接器连接程序可执行的运行模块用调试器执行和调试逻辑错?YesNo问题得到解决图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所示:开始设置显示方式设置背景色,彩色调板显示提示信息从键盘输入任意字符清屏从大到小画方框延时画十字线画任意水平垂直线填充画“心”延时从键盘输入字符YesNoYesNoYes结束No图2 动画心程序结构流程图(al)=任意键?(al)=空格?(al)=q?清除心/重复出现心 4程序源代码与运行结果4.1程序源代码根据程序设计基本思路与方案,由于小组的分工合作,在此主要负责编写主程序源代码与画斜线子程序源代码。主程序:data segmentbuff1 db Welcome you to run this program! db db *Please press any key *$buff2 db My heart beats with yours! db * Please press q to quit *$data endsstack segment stack ;定义堆栈段 stack endscode segmentmain proc far assume cs:code,ds:datastart: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ah,00 ;设置显示方式为320*200彩色图形方式 mov al,04 int 10h mov ah,0bh ;利用BIOS调用的10H中断类型11号功能设定背景色 mov bh,00 mov bl,1 ;通过(bl)的赋值0-15设定颜色,此为蓝色 int 10h mov ah,0bh ;设置彩色组 mov bh,1 mov bl,2 int 10h mov dx,offset buff1 ;显示提示信息,即buff1的字符串内容 mov ah,09 int 21h mov ah,08 ;从键盘输入1个字符,但不送显示器显示 int 21h call clear ;调用清屏子程序 sss: call text ;显示文本信息 mov di,2 ;开始画大方框 mov al,1 mov cx,70 ;显示点所在列号 mov dx,20 ;显示点所在行号 mov bx,160 ;确定方框大小 call box ;调用画方框子程序 mov cx,71 ;画方框移动轨迹,使方框变化看上去是移动的 mov dx,21 mov bx,158again: ;由大到小画轨迹方框 mov al,1 mov di,0 call box call delay mov al,0 mov di,0 call box inc cx ;每次轨迹图的行号和列号是自加1,轨迹图是由大变小 inc dx sub bx,2 ;设定每次轨迹图大小减小的程度 cmp cx,94 ;当轨迹方框大小与下一个方框相等时,退出画轨迹 jnz again mov di,0 ;画第二个方框,具体画法与画大方框相同 mov cx,95 mov dx,45 mov al,1 mov bx,110 ;第二个方框较第一个方框较小 call box mov cx,96 mov dx,46 mov bx,108again_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 ;画第三个方框 mov dx,65 mov al,1 mov bx,70 ;第三个方框较前两个小 call box mov cx,116 mov dx,66 mov bx,68again_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 mov cx,130 mov dx,80 mov bx,40 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 cx,149 mov dx,120mov al,2mov bx,60mov si,0call draw_linemov 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,30call mid_linemov cx,149mov dx,120mov al,2mov bx,60mov si,0call draw_lineheart_: ;画心 call cls_box ;清除最小方框内的内容/清除心call heart ;调用画心子程序mov ah,08 ;从键盘输入一个字符,但不送显示器显示int 21hcmp al,q ;(al)=q时,执行ok的内容,即退出jz okcmp al,20h ;(al)=空格时,转去执行heart_的内容,即清除心并重新画心jz heart_call clear ;(al)=其他键,则调用清屏子程序清屏jmp sss ;清屏后转去执行sss的内容,即动画重复ok: ;退出分支程序retmain endp ;主程序结束code ends end start画斜线子程序:Mid_line proc near add bx,cxcmp si,2 ;比较si=2时,转去执行midline_2的内容jz midline_2cmp si,3 ;比较si=3时,转去执行midline_3的内容jz midline_3cmp si,4 ;比较si=4时,转去执行midline_4的内容jz midline_4midline_1: ;画角度大于,且斜率较小的斜线mov ah,0ch ;BIOS调用10H中断类型12号功能写点及着色int 10hinc dx ;每次行坐标加1add cx,2 ;每次列坐标加2cmp cx,bx ;比较cx与bx,相当与确定斜线的长度jne midline_1 ;时继续画斜线jmp exit_linesmidline_2: ;画角度小于,且斜率较大的斜线mov ah,0ch int 10hadd dx,2 ;每次行坐标加2inc cx ;每次列坐标加1cmp cx,bxjne midline_2jmp exit_lines ;画完斜线退出该子程序midline_3: ;画角度小于,且斜率较小的斜线mov ah,0ch int 10hdec dx ;每次行坐标减1add cx,2 ;每次列坐标加2cmp cx,bxjne midline_3jmp exit_linesmidline_4: ;画角度大于,且斜率较大的斜线mov ah,0chint 10hsub dx,2 ;每次行坐标减2inc cx ;每次列坐标加1cmp cx,bxjne midline_4exit_lines: ;退出画斜线子程序ret ;返回主程序,结束中断mid_line endp ;画斜线子程序结束扩展程序:改动程序使动画方框变化从由大变小改成方框变化由小变大,并同时改变运动轨迹的变化也是由小到大。以下程序代码只写出需改动的一小段程序,其它不变与原程序相同。mov di,2 ;先画最小的方框 mov al,1 mov cx,130 ;显示点所在列号 mov dx,80 ;显示点所在行号 mov bx,40 ;设定方框大小 call box ;调用画方框子程序 mov cx,129 mov dx,79 mov bx,42again: ;画方框由小变大的轨迹 mov al,1 mov di,0 call box call delay mov al,0 mov di,0 call box dec cx ;显示点列号减1 dec dx ;显示点行号减1 add bx,2 ;每个轨迹方框大小减2 cmp cx,116 ;轨迹方框与第三个方框重合时,退出画轨迹 jnz again mov cx,115 ;画第三个方框 mov dx,65 mov al,1 mov bx,70 call box mov cx,114 mov dx,64 mov bx,72again_01: mov al,1 mov di,0 call box call delay call delay mov al,0 mov di,0 call box dec cx dec dx add bx,2 cmp cx,96 jnz again_01 mov di,0 ;画第二个方框 mov cx,95 mov dx,45 mov al,1 mov bx,110 call box mov cx,94 mov dx,44 mov bx,112again_00: mov al,1 mov di,0 call box call delay call delay mov al,0 mov di,0 call box dec cx dec dx add bx,2 cmp cx,71 jnz again_00mov di,2 ;画最大的方框,且不用画轨迹 mov al,1 mov cx,70 mov dx,20 mov bx,160 call box4.2程序运行结果用编辑器输入编好的程序源代码转换成目标文件,再将目标文件连接生成可执行文件并运行该程序,得出程序运行结果。原程序:动画心画图程序运行结果如下列图所示:图3 运行结果图显示提示信息图4运行结果图步骤一图5运行结果图步骤二图6 运行结果图完整动画心图运行结果文字描述:运行编好后的程序,屏幕背景色为蓝色,先显示“Welcome you to run this program!”“*please press any key*”的提示信息;按任意键后,出现“My heart bests with yours!”“*please press q to quit*”的文本信息;然后出现方框连续的由大变小,并留下痕迹,再出现一个心;按空格键重复出现心,任意键重复整个动画。改变颜色与方框大小后的程序运行结果如下:图7 扩展程序运行结果图显示提示信息图8 扩展程序运行结果图步骤一图9 扩展程序运行结果图步骤二图10 扩展程序运行结果图完整动画心图运行结果文字描述:运行编好后的程序,屏幕背景色为蓝色,先显示“Welcome you to run this program!”“*please press any key*”的提示信息;按任意键后,出现“My heart bests with yours!”“*please press q to quit*”的文本信息;然后出现方框连续的由小变大,并留下痕迹,再出现一个心;按空格键重复出现心,任意键重复整个动画。5调试记录与分析 原程序调试过程:根据设计原理先分别编写出画方框、画对角线、画水平垂直线,画斜线,画心型;以及清屏、清除心型、延时和显示文本信息的子程序;然后通过主程序调用每个子程序编写成可实现设计要求的完整程序。先将程序转换成目标文件,系统没发现语法错误。转换成目标文件屏幕截图如下图11所示:图11转换成目标文件截图将目标文件生连接生成可执行文件后,命令提示符显示“ There was 1 error detected.”系统发现存在一个错误,并提示“Warning:No STACK segment.”没有定义堆栈段,程序可以不定义堆栈段,该错误可以忽略。生成可执行文件的屏幕截图如下图12所示:图12 生成可执行文件截图但为了不存在错误,我们在程序中定义一段堆栈段stack segment stack stack ends定义堆栈段后错误消失了,如下图13所示:图13 加入堆栈段后生成可执行文件截图 最后,运行程序得到我们所想要的结果,完成设计任务。6附录完整程序源代码:data segmentbuff1 db Welcome you to run this programe! db db *Please press any key*$buff2 db My heart beats with yours! db * Please q to quit *$data endsstack segment stack ;定义堆栈段 stack endscode segmentmain proc far assume cs:code,ds:datastart: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ah,00 ;设置显示方式为320*200彩色图形方式 mov al,04 int 10h mov ah,0bh ;设置彩色组 mov bh,00 mov bl,1 int 10h mov ah,0bh mov bh,1 mov bl,2 int 10h mov dx,offset buff1 ;显示提示信息 mov ah,09 int 21h mov ah,08 int 21h call clear ;清屏sss: call text ;显示文本 mov di,2 mov al,1 ;画大方框 mov cx,70 mov dx,20 mov bx,160 call box mov cx,71 mov dx,21 mov bx,158again: 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 ;画第二个方框 mov cx,95 mov dx,45 mov al,1 mov bx,110 call box mov cx,96 mov dx,46 mov bx,108again_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 ;画第三个方框 mov dx,65 mov al,1 mov bx,70 call box mov cx,116 mov dx,66 mov bx,68again_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 ;画小方框 mov cx,130 mov dx,80 mov bx,40 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,30call mid_linemov cx,149 ;boldmov dx,120mov al,2mov bx,60mov si,0call draw_linemov cx,151mov dx,120mov al,2mov bx,60mov si,0call draw_lineheart_: ;画心call cls_boxcall heartmov ah,08int 21hcmp al,q ;(al)=q 退出jz okcmp al,20h ;(al)=空格 重复出现心jz heart_call clearjmp sssok:retmain endp ;主程序结束draw_Line proc near ;画线子程序push bxcmp si,0jz V_line1add bx,cxH_line:mov ah,0ch ;写像素int 10hcmp di,0jz aa0cmp di,1jz aa1call delayaa1:call delayaa0:inc cxcmp cx,bxjne H_linejmp exit_lineV_line1:add bx,dxV_line:mov ah,0chcmp di,0jz bb0cmp di,1jz bb1call delaybb1:call delaybb0:int 10hinc dxcmp dx,bxjne V_lineexit_line:pop bxretdraw_Line endp xie_line proc near ;画对角线子程序add bx,cxcmp si,1jz xieline_1xieline_0:mov ah,0chint 10hinc dxinc cxcmp cx,bxjne xieline_0jmp exit_xiexieline_1:mov ah,0chint 10hdec dxinc cxcmp cx,bxjne xieline_1exit_xie:retxie_line endpMid_line proc near ;画斜线子程序add bx,cxcmp si,2jz midline_2cmp si,3jz midline_3cmp si,4jz midline_4midline_1: mov ah,0chint 10hinc dxadd cx,2cmp cx,bxjne midline_1jmp exit_linesmidline_2:mov ah,0chint 10hadd dx,2inc cxcmp cx,bxjne midline_2jmp exit_linesmidline_3:mov ah,0chint 10hdec dxadd cx,2cmp cx,bxjne midline_3jmp exit_linesmidline_4:mov ah,0chint 10hsub dx,2inc cxcmp cx,bxjne midline_4exit_lines:retmid_line endpbox proc near ;画方框子程序push cxpush dxpush cxpush dxpush cxpush dxpush cxpush dxmov si,1call draw_line ;toppop dxpop cxadd cx,bxmov si,0call draw_line ;rightpop dxpop cxmov si,0call draw_line ;leftpop dxpop cxmov si,1add dx,bxcall draw_line ;bottompop dxpop cxretbox endptext proc near ;显示文本信息子程序mov bh,0mov dh,0mov dl,0mov ah,2int 10hmov dx,offset buff2mov ah,09int 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理配药计算讲解
- 管理学原理组织结构
- 居民议事协商能力提升培训
- 永煤消防考试题库及答案
- 银行研发面试题目及答案
- 中国好老师信息技术与学科教学深度融合培训心得体会模版
- 2025年苏教版科学小学四年级下册期末复习检测题附答案(三)
- 阳城公务员考试题及答案
- 叙永公务员考试题目及答案
- 行政公务员的考试题及答案
- 和二手车合作协议书
- 2025高考北京卷作文命题趋势分析及范文
- 国有投资公司项目跟投机制的实践与创新-以A国企为例
- 中国特色社会主义+综合练习(二)-2025届中职高考一轮复习高教版(2023版)
- 武夷山市社区工作者招聘真题2024
- 2025河南郑州航空港科创投资集团社会招聘40人笔试参考题库附带答案详解
- 初中历史清朝的边疆管理课件-2024-2025学年统编版七年级历史下册
- 人工智能AI创业计划书
- 院感手卫生知识培训资料
- 瑞幸加盟合同协议
- 墩柱及系梁专项施工方案
评论
0/150
提交评论