欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    汇编语言课设图形设计程序.doc

    • 资源ID:1228590       资源大小:418.50KB        全文页数:37页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    汇编语言课设图形设计程序.doc

    1、武汉理工大学微机原理与接口技术课程设计说明书目录摘要11方案选择11.1字符构成图形21.2在图片模式下直接导入相关图形的图片21.3在图片模式下采用计算求点写像素的方法绘图21.4在图片模式下采用鼠标绘图22编程思想23程序设计23.1主程序设计23.2矩形子程序设计33.3三角形子程序设计43.3圆形子程序设计43.4公共使用子程序设计54硬件原理55调试结果5结束语6参考文献6附录17附录2宏文件21摘要本绘图程序人机交互性好,可以方便的调节矩形,三角,圆的大小和形状。在采用bresenham算法提高了运行速度同时,图形的显示方法是采用写像素的方法定位精确轨迹平滑。同时还增加了动态显示效

    2、果,可以直观的看到像素点的移动。程序在编译之后只有2KB大小占用内存小运算快速。关键字:绘图 动态显示 任意大小计算机图形显示软件设计1 方案选择1.1字符构成图形在图形由字符构成时,屏幕的显示模式为为文字型。编程简单但是图像质量和交互性很差1.2在图片模式下直接导入相关图形的图片程序较易实现,显示的效果非常好。但是图片在取模之后很大,在读取像素写像素时较慢。交互性也不好1.3在图片模式下采用计算求点写像素的方法绘图程序编程复杂,算法复杂。绘图效果较好,程序很灵活可以显示各种形状大小的三角,矩形和圆。交互性很好而且还可以改变颜色,添加动态显示,实现图像移动等效果。1.4在图片模式下采用鼠标绘图

    3、程序的交互性很好,可以很方便的确定图形绘制的位置和大小。但是编程太复杂,查阅了有关资料。是使用dos中断来调用鼠标,之后对鼠标跟踪控制。在综合比较之下,程序的性能是首要考虑的指标。方案三和方案四比起来较易编写一些。所以最终采用的是方案三。2 编程思想在程序设计时采用先整体再分块,模块化编程的思想。首先整体设计出程序的框架,写好主程序。再分模块写好各个子函数。调试好一个功能后再去编写下一个模块。主函数的主体是一个分支选择程序。包含了三个绘图模块圆,三角,矩形的数据定义和分支入口程序段。而三个绘图子模块中又各自包含了若干子函数。同时为了使程序紧凑,还编写了一些各个子模块公共使用的子函数。程序概要框

    4、架图如下图1:程序概要框架图3 程序设计3.1主程序设计主程序主体是一个分支选择程序,包含了提示菜单,输入部分和选择部分。采用MOV AH,9 INT 21H中断在屏幕上输出提示信息。MOV AH,1 INT 21H从键盘输入一个字符将它的存在AL中再与1,2,3,q相比较跳转到响应的子函数入口程序段中。同时还设计了检验输入的程序段再输入不为1,2,3 q,时将自动跳转提示重新输入。图2:主程序流程图3.2矩形子程序设计在矩形子程序中采用写像素点的方法,点动成线将四条线一条一条的画出来。首先提示输入信息输入矩形的长和宽。调用一个输入函数将输入数据以16进制的方式存入AX中,再转存到L_S ,W

    5、_S 中。之后将屏幕的模式设为图像模式640*480*16色,将长和宽一次存入CX中采用循环LOOP指令。保持X不变Y依次增加或者Y不变X依次增加将四条直线一一画出。同时为了使显示效果更好一些对线条进行了加粗,宽度为两个像素。为了使程序结构清晰编写了WRITE_PIXEL宏指令,每调用一次就画出一个点。而且可以认为的设定点的位置颜色等。在函数中还加入了延时子程序,每画完一个点之后就调用一个延时子程序。这样就可以在屏幕上实现动态显示。在这部分的程序设计中也是采用模块化的思想,先画出一条直线。改变参数就可以画出另外的三条直线。同时在屏幕模式设定时也编写宏指令SETMODE。调用的宏指令如下WRIT

    6、E_PIXEL MACRO PAGE1,ROW,COLUMN,COLORMOV AH,0CHMOV AL,COLORMOV BH,PAGE1MOV DX,ROWMOV CX,COLUMNINT 10HENDMSETMODE MACRO MODE1MOV AH,0MOV AL,MODE1INT 10HENDM子程序流程图如下图3:矩形子程序流程图3.3三角形子程序设计在三角形绘制中程序也分为几个部分,首先是三个顶点的输入子程序。然后将三个顶点压栈,再调用Bresenham画线子程序。在Bresenham画线子程序中依次调用写像素子程序和延时子程序实现三条线段的动态显示。三角部分整体程序框架图如图

    7、4:三角子程序框架图Bresenham画线算法是绘制三角形的核心程序,分析如下Bresenham算法是计算机图形学中为了“显示器(屏幕或打印机)系由像素构成”的这个特性而设计出来的算法,使得在求直线各点的过程中全部以整数来运算,因而大幅度提升计算速度。Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。其原理是过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。 该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项 的符号,就可以确定该列所求的像素。例如对于直线方程Y=kX+b;A:0

    8、K1时候的算法 1:输入线段的两个端点Point1和Point2,并且存储到Point1(x1,y1)和Point2(x2,y2)中; 2:将Point1载入桢缓存,绘画第一个起始点; 3:计算常量x、y、2y和2(y-x),并且获得一个决策参数的第一个值:P = 2y-x; 4:从n=0开始,在沿线经过每个Xn处,进行下面的检测:如果Pn=0,下一个点绘制的是(Xn+1,Yn+1),并且Pn+1=Pn+2(y-x) 5:重复执行x-1次步骤4;B:斜率k= 1或斜率k=0时候的算法 对于斜率等于0或者斜率等于1时候,不需要通过算法直接的对于其中单一坐标变量进行处理。C:斜率k0的情况算法将起

    9、始点和中止点坐标Point1和Point2交换,可以转化到斜率为0和1之内的算法去实现。3.3圆形子程序设计图5:圆形子程序框架图在圆绘制模块中同样是采用Bresenham画线算法。先由键盘输入圆半径,再设置成图形模式。在调用圆Bresenham子程序将相关点堆栈,然后再调用圆画点子程序在屏幕上下左右四个点上向两边同时开始画点。每画一个点就调用一下延时子程序实现绘图的动态显示。3.4公共使用子程序设计为了使程序结构较清晰,将三个子模块和主函数共同使用的子函数统一编写。它们是数据输入子函数READ可以讲键盘输入的数据转化为16进制存在AX中。在各个子函数的数据输入模块都是调用的这个子函数。还有写

    10、像素子函数PIXEL。它的作用是把经过Bresenham算法堆栈的数据用写像素的方法写在屏幕上。延时子函数DELAY它的作用是延时使图像动态显示。清屏CLEAR它的作用是调背景色清屏。便于在图形模式和文字模式之间进行转换。在其中的延时子程序采用了双层循环的方法,因为各个子程序运行用时不同为了便于调试和取得更好的效果。不同的子模块对应不同的延时子程序。4 硬件原理显示器有字符显示模式和图形显示两种工作方式在图形方式下的屏幕由一个一个的像素做成。通过读写屏幕上的各个像素就可以显示出各种各样的图形。在汇编语言中提供了多种图形显示模式。设置模式的方法是:AL=模式号,AH=00H,然后通过BIOS功能

    11、调用INT10H来实现。表1常见的图形显示模式显示模式号分辨率色彩数适用显卡0DH320*20016EGA VGAOEH640*20016EGA VGA0FH640*3502EGA VGA10H640*35016EGA VGA11H640*4802MCGA VGA12H640*48016VGA13H320*200256MCGA VGAVGA显卡上256KB显存,被划分为4个64KB的位平面。比如屏幕上像素的位置是(X,Y),则改像素在显存位平面中字节地址的计算公式为:字节地址=A0000H+Y*(640/8)+X MOD 8(屏幕中有640列,每字节8位)5 调试结果图6:主菜单截屏矩形绘制输

    12、入长168,宽100图7:矩形截屏三角形输入图8:三角形截屏图9:圆形截屏结束语这次的微机课设用的时间很久,从接到题目分析。到后来的程序编写调试费了很多的功夫。收获很多,一方面是专业知识。计算机怎么来显示图形,显存是怎么工作的。怎样将内容直接写到内存中在屏幕上反映出来。对这些知识有了更深入的了解,同时对于分支选择程序。子程序的调用压栈出栈断点保护有了更深入的理解。在程序就要调试完成的时候突然发现了一个致命的错误。画完圆之后无法再画矩形。为了排查这个问题花了好长的时间一直没有解决。后来经过请教同学和仔细的思考后发现。在画圆程序中使用过CX,而在画矩形时矩形的大小是由CX来决定的。虽然前面加入了压

    13、栈出栈,但是CX值已经被改变了。再写入数据后只是把低位覆盖高位仍然是有数据的。就造成了程序的错误。类似这样的错误还有很多。调试程序的过程也是一个不断检测错误不断反思的过程。而且通过这次课设更是深入的体会到汇编语言做为底层语言在速度和大小方面有着很强的优势。程序很小但是运行速度很快,功能能够实现的也很多。更重要的是可以直接的控制计算机的硬件。在另一方面的收获就是兴趣也许在一开始时是很重要的,之后让人坚持下去的就是克服困难的勇气和决心。为了让程序的功能更加的多样化,我尝试着在其中添加各种各样的子程序。大部分的想法都实现了,可以画出任意的三角,矩形和圆。但是原本设想的图形移动和加入声音因为时间的原因

    14、没有再做。算是一点遗憾吧。在这次课设中自己也犯了一个错误,写比较大的程序时最好是和别人分工合作。相互讨论这样做的会更加完美一些,特别是在程序调试时有人商量一下是很好的可以发现一些自己不容易发现的问题和错误。在这方面因为其他人想做别的题目所以没有这么做。总的来说收获很多,想起了以前上的一门选修课。夏老师讲的先整体再部分来设计系统。还有对问题的思考方法在这次课设中让我少走了很多弯路。参考文献1. 新编汇编语言程序设计,杨文显2. 微机原理与接口技术,周佩玲3. 80X86汇编语言程序设计,王元珍4. 汇编程序三角形画法,李永飞附录1主序代码部分INCLUDE YLIB.HDATAS SEGMENT

    15、;*;主函数菜单使用的提示字符串;* MESS1 DB 0DH,0AH,Welcom to my program,Im Gaolingxiao.NO.:0120911350101 $ MESS2 DB 0DH,0AH,Please input a number(1-3) to chose a program:$ MESS3 DB 0DH,0AH,Press 1 to draw a squareness $ MESS4 DB 0DH,0AH,Press 2 to draw a triangle$ MESS5 DB 0DH,0AH,Press 3 to draw a circle $ MESS6

    16、DB 0DH,0AH,Your choice: $MESS7 DB 0DH,0AH,Press 0 to main meue,press q to quit: $MESS8 DB 0DH,0AH,sorry! Input erroe. $MESS9 DB 0DH,0AH,Press q to quit $;*;各个子函数公共使用的数据定义部分;*COLOR DW 02 BKCOLOR DW 0 ;黑色为0 BUFFER DB 6,?,6 DUP(?) ;输入函数暂存bufferC10 DW 10;*;圆用的数据段定义和提示语;*MESS1_C DB 0DH,0AH,Please input t

    17、he radius(1-200): $OL_C DB ? ;保存原来屏幕格式用X DW 280 ;圆心位置Y DW 240RADIUS DW 150 ;半径长度;*;矩形用的数据段定义和提示字符串;*OL_S DB ? ;矩形的原来图像模式X_S DW 50 ;矩形的起始坐标Y_S DW 50 ;矩形的起始坐标L_S DW ?W_S DW ?COLOR_S DB 2MESS1_S DB 0DH,0AH,Please input the length(1-500):$MESS2_S DB 0DH,0AH,Please input the width(1-500):$MESS3_S DB 0DH,

    18、0AH,Press 0 to main menu,1 to draw again,other key to quit.$ ;*;三角用的数据段定义和提示字符;*POINT DB 24,?,24 DUP(?)OL_T DB ? MESS1_T DB 0DH,0AH,Please input the frist point $MESS2_T DB 0DH,0AH,Please input the second point $MESS3_T DB 0DH,0AH,Please input the third point $ MESS5_T DB 0DH,0AH,X:$MESS6_T DB 0DH,0

    19、AH,Y:$MESS7_T DB 0DH,0AH,Input error$DATAS ENDSSTACKS SEGMENT DW 100 DUP(0) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AXLEA DX,MESS1MOV AH,9INT 21H;*;显示主菜单提示字符串;*DISPLAY: LEA DX,MESS2MOV AH,9INT 21HLEA DX,MESS3MOV AH,9INT 21HLEA DX,MESS4MOV AH,9INT 21HLEA DX,MESS5M

    20、OV AH,9INT 21HLEA DX,MESS9MOV AH,9INT 21HLEA DX,MESS6MOV AH,9INT 21H;*;主菜单选择部分;*INPUT:MOV AH,1INT 21HCMP AL,1JB DISPLAYJE SQUARCMP AL,2JE TRIACMP AL,3JE CRICCMP AL,qJE OUTPUTJMP DISPLAYSQUAR: ;矩形子程序的入口部分CALL SQUAR_PJMP OUTPUTTRIA: ;三角子程序的入口部分CALL TRIA_PJMP OUTPUTCRIC: ;圆形子程序的入口部分CALL CRIC_PJMP OUTPU

    21、TOUTPUT:;退出程序段MOV AH,9INT 21H MOV AH,4CH INT21H;* ;方块绘制子程序段;*SQUAR_P PROC NEARPUSH CX LONG:;输入矩形的长度部分LEA DX,MESS1_SMOV AH,9INT 21HXOR AX,AXCALLREAD;调用输入子函数数据放在AXCMP AX,0JB LONG_ERCMP AX,01F4HJA LONG_ERMOV WORD PTR L_S,AXJMP WIDTH_SLONG_ER:;在输入错误时的程序段CALL INPUT_ERJMP LONGWIDTH_S:;输入矩形的宽度部分LEA DX,MESS

    22、2_SMOVAH,9INT 21HXOR AX,AXCALLREAD;调用输入子函数数据放在AXCMP AX,0JB WIDTH_ERCMP AX,01F4HJA WIDTH_ERMOV WORD PTR W_S,AXMOV AH,0FHINT 10HMOV OL_S,ALSETMODE 12H;设置640*480*16图形模式XOR CX,CX;将CX清零,防止干扰MOV CX,WORD PTR L_SMOVDX,Y_SJMPL1_SWIDTH_ER:;在输入错误时的程序段CALL INPUT_ERJMP WIDTH_SL1_S:;画第一条直线PUSH CX;压栈保护WRITE_PIXEL

    23、0,Y_S,X_S,COLOR_S;调用写像素的宏命令CALL DELAY_S;延时实现动态效果INC X_SPOP CXLOOPL1_S;循环画点XOR CX,CXMOV CX,WORD PTR W_S;将宽度存入CXL2_S:PUSH CX;画第二条直线WRITE_PIXEL 0,Y_S,X_S,COLOR_SCALL DELAY_SINC Y_SPOPCXLOOP L2_SXORCX,CXMOV CX,WORD PTR L_SL3_S:;画第三条直线PUSH CXWRITE_PIXEL 0,Y_S,X_S,COLOR_SCALL DELAY_SDECX_SPOPCXLOOP L3_SXO

    24、R CX,CXMOV CX,WORD PTR W_SL4_S:;画第四条直线PUSH CXWRITE_PIXEL 0,Y_S,X_S,COLOR_SCALL DELAY_SDEC Y_SPOP CXLOOP L4_SMOV AH,0INT16HMOV AH,0MOV AL,OL_S;恢复原来屏幕格式INT 10HLEA DX,MESS3_S;提示菜单信息MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,1JE LONGCMP AL,0JE DISPLAYCMP AL,qJE OUTPUTPOPCXJEOUTPUTRETSQUAR_P ENDP;*;三角绘制子程序;*TRIA_P PROC NEARPUSH CXCALL INPUT_T MOV AH,0FHINT 10HMOV OL_T,AL;保存原来屏幕格式,用来恢复的MOV AX,0A000H ;显存MOV ES,AX SETMODE 12H


    注意事项

    本文(汇编语言课设图形设计程序.doc)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开