ImageVerifierCode 换一换
格式:DOC , 页数:37 ,大小:418.50KB ,
资源ID:1457682      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1457682.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

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

汇编语言课设图形设计程序Word文件下载.doc

1、所以最终采用的是方案三。2 编程思想在程序设计时采用先整体再分块,模块化编程的思想。首先整体设计出程序的框架,写好主程序。再分模块写好各个子函数。调试好一个功能后再去编写下一个模块。主函数的主体是一个分支选择程序。包含了三个绘图模块圆,三角,矩形的数据定义和分支入口程序段。而三个绘图子模块中又各自包含了若干子函数。同时为了使程序紧凑,还编写了一些各个子模块公共使用的子函数。程序概要框架图如下图1:程序概要框架图3 程序设计3.1主程序设计主程序主体是一个分支选择程序,包含了提示菜单,输入部分和选择部分。采用MOV AH,9 INT 21H中断在屏幕上输出提示信息。MOV AH,1 INT 21

2、H从键盘输入一个字符将它的存在AL中再与1,2,3,q相比较跳转到响应的子函数入口程序段中。同时还设计了检验输入的程序段再输入不为1,2,3 q,时将自动跳转提示重新输入。图2:主程序流程图3.2矩形子程序设计在矩形子程序中采用写像素点的方法,点动成线将四条线一条一条的画出来。首先提示输入信息输入矩形的长和宽。调用一个输入函数将输入数据以16进制的方式存入AX中,再转存到L_S ,W_S 中。之后将屏幕的模式设为图像模式640*480*16色,将长和宽一次存入CX中采用循环LOOP指令。保持X不变Y依次增加或者Y不变X依次增加将四条直线一一画出。同时为了使显示效果更好一些对线条进行了加粗,宽度

3、为两个像素。为了使程序结构清晰编写了WRITE_PIXEL宏指令,每调用一次就画出一个点。而且可以认为的设定点的位置颜色等。在函数中还加入了延时子程序,每画完一个点之后就调用一个延时子程序。这样就可以在屏幕上实现动态显示。在这部分的程序设计中也是采用模块化的思想,先画出一条直线。改变参数就可以画出另外的三条直线。同时在屏幕模式设定时也编写宏指令SETMODE。调用的宏指令如下WRITE_PIXEL MACRO PAGE1,ROW,COLUMN,COLORMOV AH,0CHMOV AL,COLORMOV BH,PAGE1MOV DX,ROWMOV CX,COLUMNINT 10HENDMSET

4、MODE MACRO MODE1MOV AH,0MOV AL,MODE1子程序流程图如下图3:矩形子程序流程图3.3三角形子程序设计在三角形绘制中程序也分为几个部分,首先是三个顶点的输入子程序。然后将三个顶点压栈,再调用Bresenham画线子程序。在Bresenham画线子程序中依次调用写像素子程序和延时子程序实现三条线段的动态显示。三角部分整体程序框架图如图4:三角子程序框架图Bresenham画线算法是绘制三角形的核心程序,分析如下Bresenham算法是计算机图形学中为了“显示器(屏幕或打印机)系由像素构成”的这个特性而设计出来的算法,使得在求直线各点的过程中全部以整数来运算,因而大幅

5、度提升计算速度。Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。其原理是过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。 该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项 的符号,就可以确定该列所求的像素。例如对于直线方程Y=kX+b;A:0K1时候的算法 1:输入线段的两个端点Point1和Point2,并且存储到Point1(x1,y1)和Point2(x2,y2)中; 2:将Point1载入桢缓存,绘画第一个起始点; 3:计算常量x、y、2y和2(y-x),并且获得一

6、个决策参数的第一个值: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的情况算法将起始点和中止点坐标Point1和Point2交换,可以转化到斜率为0和1之内的算法去实现。3.3圆形子程序设计图5:圆形子程序框架图在圆绘制模块中同样是采用Bresenham画线算法。先由键盘输入圆半径,再设置成图形模式。在调用圆Bres

7、enham子程序将相关点堆栈,然后再调用圆画点子程序在屏幕上下左右四个点上向两边同时开始画点。每画一个点就调用一下延时子程序实现绘图的动态显示。3.4公共使用子程序设计为了使程序结构较清晰,将三个子模块和主函数共同使用的子函数统一编写。它们是数据输入子函数READ可以讲键盘输入的数据转化为16进制存在AX中。在各个子函数的数据输入模块都是调用的这个子函数。还有写像素子函数PIXEL。它的作用是把经过Bresenham算法堆栈的数据用写像素的方法写在屏幕上。延时子函数DELAY它的作用是延时使图像动态显示。清屏CLEAR它的作用是调背景色清屏。便于在图形模式和文字模式之间进行转换。在其中的延时子

8、程序采用了双层循环的方法,因为各个子程序运行用时不同为了便于调试和取得更好的效果。不同的子模块对应不同的延时子程序。4 硬件原理显示器有字符显示模式和图形显示两种工作方式在图形方式下的屏幕由一个一个的像素做成。通过读写屏幕上的各个像素就可以显示出各种各样的图形。在汇编语言中提供了多种图形显示模式。设置模式的方法是:AL=模式号,AH=00H,然后通过BIOS功能调用INT10H来实现。表1常见的图形显示模式显示模式号分辨率色彩数适用显卡0DH320*20016EGA VGAOEH640*2000FH640*350210H11H640*480MCGA VGA12HVGA13H256VGA显卡上2

9、56KB显存,被划分为4个64KB的位平面。比如屏幕上像素的位置是(X,Y),则改像素在显存位平面中字节地址的计算公式为:字节地址=A0000H+Y*(640/8)+X MOD 8(屏幕中有640列,每字节8位)5 调试结果图6:主菜单截屏矩形绘制输入长168,宽100图7:矩形截屏三角形输入图8:三角形截屏图9:圆形截屏结束语这次的微机课设用的时间很久,从接到题目分析。到后来的程序编写调试费了很多的功夫。收获很多,一方面是专业知识。计算机怎么来显示图形,显存是怎么工作的。怎样将内容直接写到内存中在屏幕上反映出来。对这些知识有了更深入的了解,同时对于分支选择程序。子程序的调用压栈出栈断点保护有

10、了更深入的理解。在程序就要调试完成的时候突然发现了一个致命的错误。画完圆之后无法再画矩形。为了排查这个问题花了好长的时间一直没有解决。后来经过请教同学和仔细的思考后发现。在画圆程序中使用过CX,而在画矩形时矩形的大小是由CX来决定的。虽然前面加入了压栈出栈,但是CX值已经被改变了。再写入数据后只是把低位覆盖高位仍然是有数据的。就造成了程序的错误。类似这样的错误还有很多。调试程序的过程也是一个不断检测错误不断反思的过程。而且通过这次课设更是深入的体会到汇编语言做为底层语言在速度和大小方面有着很强的优势。程序很小但是运行速度很快,功能能够实现的也很多。更重要的是可以直接的控制计算机的硬件。在另一方

11、面的收获就是兴趣也许在一开始时是很重要的,之后让人坚持下去的就是克服困难的勇气和决心。为了让程序的功能更加的多样化,我尝试着在其中添加各种各样的子程序。大部分的想法都实现了,可以画出任意的三角,矩形和圆。但是原本设想的图形移动和加入声音因为时间的原因没有再做。算是一点遗憾吧。在这次课设中自己也犯了一个错误,写比较大的程序时最好是和别人分工合作。相互讨论这样做的会更加完美一些,特别是在程序调试时有人商量一下是很好的可以发现一些自己不容易发现的问题和错误。在这方面因为其他人想做别的题目所以没有这么做。总的来说收获很多,想起了以前上的一门选修课。夏老师讲的先整体再部分来设计系统。还有对问题的思考方法

12、在这次课设中让我少走了很多弯路。参考文献1. 新编汇编语言程序设计,杨文显2. 微机原理与接口技术,周佩玲3. 80X86汇编语言程序设计,王元珍4. 汇编程序三角形画法,李永飞附录1主序代码部分INCLUDE YLIB.HDATAS SEGMENT;*主函数菜单使用的提示字符串 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,Pres

13、s 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 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

14、 BKCOLOR DW 0 ;黑色为0 BUFFER DB 6,?,6 DUP(?) ;输入函数暂存bufferC10 DW 10圆用的数据段定义和提示语MESS1_C DB 0DH,0AH,Please input the 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,P

15、lease input the length(1-500):MESS2_S DB 0DH,0AH,Please input the width(1-500):MESS3_S DB 0DH,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

16、$MESS3_T DB 0DH,0AH,Please input the third point $ MESS5_T DB 0DH,0AH,X:MESS6_T DB 0DH,0AH,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,MES

17、S2LEA DX,MESS3LEA DX,MESS4LEA DX,MESS5LEA DX,MESS9LEA DX,MESS6主菜单选择部分INPUT:MOV AH,1CMP AL,1JB DISPLAYJE SQUAR2JE TRIA3JE CRICqJE OUTPUTJMP DISPLAYSQUAR: ;矩形子程序的入口部分CALL SQUAR_PJMP OUTPUTTRIA:三角子程序的入口部分CALL TRIA_PCRIC:圆形子程序的入口部分CALL CRIC_POUTPUT:;退出程序段INT 21H MOV AH,4CH INT21H* 方块绘制子程序段SQUAR_P PROC N

18、EARPUSH CX LONG:输入矩形的长度部分LEA DX,MESS1_SXOR 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,MESS2_SMOVAH,9CMP AX,0JB WIDTH_ERJA WIDTH_ERMOV WORD PTR W_S,AXMOV AH,0FHINT 10HMOV OL_S,ALSETMO

19、DE 12H;设置640*480*16图形模式XOR CX,CX;将CX清零,防止干扰MOV CX,WORD PTR L_SMOVDX,Y_SJMPL1_SWIDTH_ER:JMP WIDTH_SL1_S:画第一条直线PUSH CX;压栈保护WRITE_PIXEL 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 DELA

20、Y_SINC Y_SPOPCXLOOP L2_SXORCX,CXL3_S:画第三条直线PUSH CXDECX_SLOOP L3_SMOV CX,WORD PTR W_SL4_S:画第四条直线DEC Y_SLOOP L4_SMOV AH,0INT16HMOV AH,0MOV AL,OL_S;恢复原来屏幕格式LEA DX,MESS3_S;提示菜单信息JE LONG0JE DISPLAYJE OUTPUTJEOUTPUTRETSQUAR_P ENDP三角绘制子程序TRIA_P PROC NEARCALL INPUT_T MOV AH,0FHMOV OL_T,AL;保存原来屏幕格式,用来恢复的MOV AX,0A000H ;显存MOV ES,AX SETMODE 12H

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

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