图形变换Word文档格式.docx
《图形变换Word文档格式.docx》由会员分享,可在线阅读,更多相关《图形变换Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
设计之前要查询资料,熟悉DOS调用和BIOS调用,以便在DOS界面上能输出图形和颜色。
二、图形变换的原理分析
根据课程设计任务书所给出条件要求,我主要把程序分为四部分来实现,即把程序分为四个模块,采用子程序调用的方法,这样不仅有利于程序的编写,使程序清晰可见,还方便程序的修改及阅读。
第一个模块为主程序模块,该程序快中主要有清屏程序组,使屏幕上卷,从而实现清屏功能,清屏功能用INT10H的功能六实现,键盘输入判断,利用CMP指令,判断ZF标志位,从而调用正确的子程序,最后是退出语句。
第二个模块为画圆程序块。
第三个模块和第四个模块分别为画矩形和画三角形子程序,他们的原理是完全相同的,首先利用CX确定一个行坐标,利用DX确定一个纵坐标,两坐标交点即为像素点坐标,然后利用INT10H的0CH号功能写入像素,用BH的值确定像素点颜色,利用CX寄存器的值确定直线的像素点个数,即为线长,此法关键在于正确确定每个顶点的坐标。
3、设计方案的选择
根据题目要求需实现画图功能,我主要采用了两种方法。
第一种方法是直接建立坐标,在坐标点写入像素,该方法利用10H中断的0CH号功能写像素,并且通过AL寄存器设置像素点颜色,用这个方法的话比较容易理解,无需其他算法,操作起来比较简单,但是能实现的画图功能比较有限,如利用这个方法画直线比较简单,语句较少,但是在画非直线图形的时候用这个方法反而变得很复杂。
第二个方法通过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。
该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素。
四、程序分析与设计
1、主程序的分析与设计
首先分析主程序,主程序中包含了清屏程序和子程序调用以及退出子程序,清屏子程序的目的是清楚屏幕上的内容,接着根据输入字母判断后调用符合条件的子程序。
主程序如下:
MAINPROCFAR
MOVAX,DATAS
MOVDS,AX
MOVAX,0600H;
用INT10H的功能6清屏
MOVBH,7
MOVCX,0;
窗口左上角坐标
MOVDX,184FH;
窗口右上角坐标
INT10H
L1:
MOVAH,1;
利用21H中断判断字母
INT21H;
输入并改变ZF标志位
CMPAL,'
S'
JZP1
T'
JZP2
Q'
JZEXIT
JMPL1
P1:
CALLJUXING;
调用画矩形的子程序
P2:
CALLSANJIAO;
调用画三角形的子程序
EXIT:
MOVAX,4C00H:
退出子程序
INT21H
MAINENDP
主程序流程图如下图图1所示:
Y
N
N
图1程序流程图
2、画三角形子程序分析
画三角形子程序:
画三角形子程序靠点亮屏幕像素点实现,通过INT10H中断的0C号功能设置屏幕的模式为写像素模式,通过BH的值确定像素点颜色,通过坐标确定三角形各点的坐标,CX的值为横坐标,DX的值为纵坐标,通过循环点亮像素点分别构成三角形的两直角边和斜边。
画三角形子程序如下:
SANJIAOPROCNEAR
MOVAH,0;
设置显示模式
MOVAL,12H
INT10H
MOVCX,100;
从坐标(100,200)处画第一个三角形水平线
MOVDX,200
LOP1:
MOVAH,0CH
MOVAL,0AH
MOVBH,0
INCCX
CMPCX,200;
线长为100
JNZLOP1
从坐标(100,200)处画第MOVDX,200一个三角形垂直线
LOP2:
MOVAH,0CH;
写像素功能
MOVAL,0AH;
颜色为浅绿色
DECDX
CMPDX,100;
判断线是否结束,线长为100
JNZLOP2
从坐标(100,100)处画第一个
MOVDX,100三角形斜线
LOP3:
INCDX
CMPDX,200
JNZLOP3
MOVCX,300;
画第二个三角形,画法和的个三角MOVDX,200一样关键在于找准坐标
LOP4:
MOVAL,0CH
CMPCX,400
JNZLOP4
MOVCX,300
LOP5:
CMPDX,100
JNZLOP5
MOVDX,100
LOP6:
JNZLOP6
MOVCX,500;
画第三个三角形
LOP7:
MOVAL,0EH
CMPCX,600
JNZLOP7
MOVCX,500
LOP8:
JNZLOP8
LOP9:
JNZLOP9
RET
SANJIAOENDP
画三角形程序流程图如下图图2所示:
图2画三角形程序流程图
图2为画三角形程序流程图,画出一边后,依据同样的方法确定坐标即可画出其余所有边。
3、画矩形子程序分析
画矩形程序分析:
矩形的画法和三角形的画法是一样的,找准各个点的坐标,从一个坐标到另一个坐标之间点亮像素点即为矩形的边。
画矩形的程序如下:
JUXINGPROCFAR
MOVAH,0
MOVCX,50;
画第一个矩形
MOVDX,200;
起始点坐标为(50,200)
设置写像素
设置颜色
MOVBH,0;
设置页号(一般为0)
INCCX;
横坐标加一
CMPCX,100;
判断直线是否画完
JNZLOP1;
若ZF不为0则循环LOP1
直到画完直线
以下程序段和上一断是一样的
除坐标外用法相似,在此不再
阐述
MOVCX,50
CMPCX,100
MOVCX,100
MOVCX,150;
第二个矩形
CMPCX,200
MOVCX,150
MOVCX,200
MOVCX,250;
第三个矩形
CMPCX,300
MOVCX,250
LOP10:
JNZLOP10
LOP11:
JNZLOP11
LOP12:
JNZLOP12
MOVCX,350;
第四个矩形
LOP13:
MOVAL,0FH
JNZLOP13
MOVCX,350
LOP14:
JNZLOP14
LOP15:
JNZLOP15
MOVCX,400
LOP16:
JNZLOP16
JUXINGENDP
画矩形程序流程图和三角形程序流程图如下图图3所示:
图3画矩形程序流程图
五、调试记录与结果分析
1、调试记录
程序代码写好之后,我进行了大量调试工作,首先是把子程序通过主函数连接在一起,运行程序后,生成了EXE文件,但是无法得出结果,跳出对话框显示“系统不支持全屏显示”,于是在网上查了之后发现在win7下DOS不支持全屏显示,如下图图4所示:
图4调试错误截图
通过同学的帮助,最终找到了解决办法,利用一个叫DOSBOX的软件能在win7的环境下运行汇编该EXE文件,但在运行时需要用到几句调用指令。
指令如下
MOUNTCD:
\
C:
文件名.EXE
此外在程序编写过程中也遇到了一些小问题,跳转设置不正确,使程序无法按预定的步骤跳转,在主程序中条件跳转JZ和无条件跳转JMP的运用没有用对,最终通过几次调试,找到了正确的排放顺序。
2、结果分析
程序调试正确后按不同的字母有不同的显示,实现了题目所要求的功能。
按S后程序运行后结果显示如下图图5所示:
图5四个矩形
按T后程序运行结果显示如下图图6所示:
图6三个三角形
五、心得体会
通过几天的努力,我完成了这次微机原理课程设计,其中遇到了很多问题,最难得应该是如何画圆我通过上网查资料最终找到了解决办法,其次是无法运行的问题,通过同学的帮助的利用DOS软件解决了该问题,在课程设计中,我把程序分为两个大步骤进行,首先是分别完成画三角形,画矩形,画圆的功能,实现模块化功能,然后再通过子程序调用将程序连接起来并调试实现我们想要的功能。
在课程设计中,用到了很多在课堂上没有涉及并学习的相关知识,如很多中断功能号的作用及相关寄存器的设置,颜色的搭配等,本次课程设计中我主要用到了10H中断,16H中断,21H中断,它们都有很多功能号,且不同的功能号实现不同的功能,所以我们必须查阅很多资料,借此我们可以学到了一些新的东西,如INT10H的06H号克用来作清屏功能,21H中断的01H可以用来扫描键盘输入,在设置像素点颜色是只需在10H中断的0C号功能下设置BH寄存器即可等。
通过课程设计,让我认识到汇编语言和其他高级语言的不同点,汇编语言晦涩难懂但运行效率很高,高级语言虽然容易编写但相对汇编语言效率较低,通过这次课程设计让我对微机原理课程上讲到的各种部分的功能,以及子程序的调用有了实际运用的机会,还提高了自己的动手能力和运用汇编语言的编程能力,对我以后走上工作岗位很有帮助,加强了专业技能。
参考文献
[1]《微机原理与接口技术》(基于16位机),周佩玲等,电子工业出版社.2005
[2]《微型计算机原理与接口技术》,姚燕南,高等教育出版社.2004
[3]《计算机硬件技术及应用基础.下册:
接口与应用》,邹逢兴,国防科技大学出版社.2001
[4]《微型计算机接口技术及应用》,2000.刘乐善,华中科技大学出版社.
[5]《IBMPC汇编语言程序设计》,2001.沈美明、温冬婵,清华大学出版社.
[6]《80X86汇编语言程序设计》.马妮编著,机械工业出版社,2009
[7]《汇编语言程序设计》.齐志儒、高福祥,东北大学出版社,2000
[8]《微型计算机原理与接口技术》.姚燕南、薛钧义,北京:
高等教育出版社,2004
[9]《汇编语言(第二版)》.王爽,清华大学出版社,2008
[10]《Windows环境下汇编语言程序设计》.蓝琚成,地质出版社,2000
[11]《IBM—PC汇编语言程序设计(第二版)》.沈美明、温冬婵,清华大学出版社,2005年
设计总结:
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
指导教师评语:
课程设计成绩:
指导教师签名:
年月日