图形变换.docx
- 文档编号:8580678
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:19
- 大小:109.71KB
图形变换.docx
《图形变换.docx》由会员分享,可在线阅读,更多相关《图形变换.docx(19页珍藏版)》请在冰豆网上搜索。
图形变换
微机原理课程设计说明书
级专业班
题目图形变换
姓名学号
指导教师职称
年月日
图形变换
摘要
汇编语言是一门涉及硬件的程序语言,也是电气工程及其自动化专业的一门重要的专业基础课。
也是学习微机接口与原理技术必须掌握的一门语言。
本次课程设计就是利用汇编语言直接操作硬件,实现画图,并且根据键盘字母输入从从屏幕上输出不同颜色,不同形状的图形。
该报告主要包括了涉及任务及要求分析,系统原理阐述,流程图和源程序,其中程序主要分为两大部分,主程序和子程序,主程序中包含了清屏指令组,子程序调用指令和退出指令,子程序分别实现画三角形,画矩形的功能。
本次课程设计主要是通过应用微机原理中汇编的几个步骤——编辑、汇编、连接、运行或调试运行,使得在DOS界面完成图形变换。
关键词:
汇编语言、DOS、BIOS
一、设计任务及要求分析
1、设计任务
按S用四种颜色各显示一个矩形的程序,按T用三种颜色各显示一个三角形的程序,按Q退出程序。
2、要求分析
本课程设计的任务是用汇编语言编写一个“显示图形变换程序”,根据题目分析可得该程序需要实现以下几个功能,第一,检测键盘字母输入;第二,判断字母是否符合要求,第三,当符合条件时调用正确的子程序;第四,运行输出想要的结果。
本课程设计大体可分为二个子程序,即显示矩形和显示三角形的程序。
设计之前要查询资料,熟悉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
CMPAL,'T'
JZP2
CMPAL,'Q'
JZEXIT
JMPL1
P1:
CALLJUXING;调用画矩形的子程序
JMPL1
P2:
CALLSANJIAO;调用画三角形的子程序
JMPL1
EXIT:
MOVAX,4C00H:
退出子程序
INT21H
MAINENDP
主程序流程图如下图图1所示:
Y
N
Y
N
N
Y
图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
INT10H
INCCX
CMPCX,200;线长为100
JNZLOP1
MOVCX,100;从坐标(100,200)处画第MOVDX,200一个三角形垂直线
LOP2:
MOVAH,0CH;写像素功能
MOVAL,0AH;颜色为浅绿色
MOVBH,0
INT10H
DECDX
CMPDX,100;判断线是否结束,线长为100
JNZLOP2
MOVCX,100;从坐标(100,100)处画第一个
MOVDX,100三角形斜线
LOP3:
MOVAH,0CH
MOVAL,0AH
MOVBH,0
INT10H
INCCX
INCDX
CMPDX,200
JNZLOP3
MOVCX,300;画第二个三角形,画法和的个三角MOVDX,200一样关键在于找准坐标
LOP4:
MOVAH,0CH
MOVAL,0CH
MOVBH,0
INT10H
INCCX
CMPCX,400
JNZLOP4
MOVCX,300
MOVDX,200
LOP5:
MOVAH,0CH
MOVAL,0CH
MOVBH,0
INT10H
DECDX
CMPDX,100
JNZLOP5
MOVCX,300
MOVDX,100
LOP6:
MOVAH,0CH
MOVAL,0CH
MOVBH,0
INT10H
INCCX
INCDX
CMPDX,200
JNZLOP6
MOVCX,500;画第三个三角形
MOVDX,200
LOP7:
MOVAH,0CH
MOVAL,0EH
MOVBH,0
INT10H
INCCX
CMPCX,600
JNZLOP7
MOVCX,500
MOVDX,200
LOP8:
MOVAH,0CH
MOVAL,0EH
MOVBH,0
INT10H
DECDX
CMPDX,100
JNZLOP8
MOVCX,500
MOVDX,100
LOP9:
MOVAH,0CH
MOVAL,0EH
MOVBH,0
INT10H
INCCX
INCDX
CMPDX,200
JNZLOP9
RET
SANJIAOENDP
画三角形程序流程图如下图图2所示:
Y
N
图2画三角形程序流程图
图2为画三角形程序流程图,画出一边后,依据同样的方法确定坐标即可画出其余所有边。
3、画矩形子程序分析
画矩形程序分析:
矩形的画法和三角形的画法是一样的,找准各个点的坐标,从一个坐标到另一个坐标之间点亮像素点即为矩形的边。
画矩形的程序如下:
JUXINGPROCFAR
MOVAH,0
MOVAL,12H
INT10H
MOVCX,50;画第一个矩形
MOVDX,200;起始点坐标为(50,200)
LOP1:
MOVAH,0CH;设置写像素
MOVAL,0AH;设置颜色
MOVBH,0;设置页号(一般为0)
INT10H
INCCX;横坐标加一
CMPCX,100;判断直线是否画完
JNZLOP1;若ZF不为0则循环LOP1
直到画完直线
MOVCX,50;以下程序段和上一断是一样的
MOVDX,200;除坐标外用法相似,在此不再
LOP2:
MOVAH,0CH;阐述
MOVAL,0AH
MOVBH,0
INT10H
DECDX
CMPDX,100
JNZLOP2
MOVCX,50
MOVDX,100
LOP3:
MOVAH,0CH
MOVAL,0AH
MOVBH,0
INT10H
INCCX
CMPCX,100
JNZLOP3
MOVCX,100
MOVDX,100
LOP4:
MOVAH,0CH
MOVAL,0AH
MOVBH,0
INT10H
INCDX
CMPDX,200
JNZLOP4
MOVCX,150;第二个矩形
MOVDX,200
LOP5:
MOVAH,0CH
MOVAL,0CH
MOVBH,0
INT10H
INCCX
CMPCX,200
JNZLOP5
MOVCX,150
MOVDX,200
LOP6:
MOVAH,0CH
MOVAL,0CH
MOVBH,0
INT10H
DECDX
CMPDX,100
JNZLOP6
MOVCX,150
MOVDX,100
LOP7:
MOVAH,0CH
MOVAL,0CH
MOVBH,0
INT10H
INCCX
CMPCX,200
JNZLOP7
MOVCX,200
MOVDX,100
LOP8:
MOVAH,0CH
MOVAL,0CH
MOVBH,0
INT10H
INCDX
CMPDX,200
JNZLOP8
MOVCX,250;第三个矩形
MOVDX,200
LOP9:
MOVAH,0CH
MOVAL,0EH
MOVBH,0
INT10H
INCCX
CMPCX,300
JNZLOP9
MOVCX,250
MOVDX,200
LOP10:
MOVAH,0CH
MOVAL,0EH
MOVBH,0
INT10H
DECDX
CMPDX,100
JNZLOP10
MOVCX,250
MOVDX,100
LOP11:
MOVAH,0CH
MOVAL,0EH
MOVBH,0
INT10H
INCCX
CMPCX,300
JNZLOP11
MOVCX,300
MOVDX,100
LOP12:
MOVAH,0CH
MOVAL,0EH
MOVBH,0
INT10H
INCDX
CMPDX,200
JNZLOP12
MOVCX,350;第四个矩形
MOVDX,200
LOP13:
MOVAH,0CH
MOVAL,0FH
MOVBH,0
INT10H
INCCX
CMPCX,400
JNZLOP13
MOVCX,350
MOVDX,200
LOP14:
MOVAH,0CH
MOVAL,0FH
MOVBH,0
INT10H
DECDX
CMPDX,100
JNZLOP14
MOVCX,350
MOVDX,100
LOP15:
MOVAH,0CH
MOVAL,0FH
MOVBH,0
INT10H
INCCX
CMPCX,400
JNZLOP15
MOVCX,400
MOVDX,100
LOP16:
MOVAH,0CH
MOVAL,0FH
MOVBH,0
INT10H
INCDX
CMPDX,200
JNZLOP16
RET
JUXINGENDP
画矩形程序流程图和三角形程序流程图如下图图3所示:
Y
N
图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年
设计总结:
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
指导教师评语:
课程设计成绩:
指导教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 变换