汇编绘制三角形图形程序_第1页
汇编绘制三角形图形程序_第2页
汇编绘制三角形图形程序_第3页
汇编绘制三角形图形程序_第4页
汇编绘制三角形图形程序_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华 北 科 技 学 院汇编语言程序设计课程设计说明书学号: 201307024208 班级: 网络B132班 姓名: 白龙 设计题目: 绘制三角形图形程序 设计地点: 信息楼 设计时间: 2015.12.14 至 2015.12.25 成绩评定:1、工作量: A( ),B( ),C( ),D( ),F( )2、难易度: A( ),B( ),C( ),D( ),F( )3、答辩情况:基本操作: A( ),B( ),C( ),D( ),F( )代码理解: A( ),B( ),C( ),D( ),F( )4、报告规范度: A( ),B( ),C( ),D( ),F( )5、学习态度: A( ),B(

2、 ),C( ),D( ),F( )总评成绩:_指导教师:_课题组成员及分工(注:多人一组填写本页)姓名完成的主要内容签字1 课程设计的目的及要求 对程序的设计方法和算法技能的基本训练,熟悉并联系在课堂上学到的有关程序设计的基本知识和基本方法。要求自主动手能力的培养,了解并熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平2 需求分析2.1 问题陈述绘制三角形程序是设计一个由坐标确定三角形的程序,输入坐标画出三角形。主要有以下几个模块:1、 主函数2、 画线算法3、 点连接算法4、 顶点输入5、 二进制转换算法2.2 功能需求分析绘制三角形程序包括以下几个功能:

3、1、 输入直角三角形2、 输入锐角三角形3、 输入钝角三角形4、 输入自定义三角形3 总体设计3.1 功能结构图设计绘制三角形输入直角三角形输入锐角三角形输入钝角三角形输入自定义三角形退出3.2 模块简介1、 主函数模块:欢迎界面及调用功能界面。2、 画直角三角形3、 画锐角三角形4、 画钝角三角形5、 画自定义三角形6、 顶点输入模块(INPUT_T):输入三角形的三个顶点7、 画线模块(DrawLine):已知两点将两点连线。4 详细设计4.1 主模块详细设计欢迎界面及调用功能界面。4.2 子模块详细设计主模块及各子模块的详细设计中包括数据存储设计、界面设计、程序流程图输入顶点坐标INPU

4、TT_T 画线算法:对于直线方程Y=kX+b;A:0<K<1时候的算法  1:输入线段的两个端点Point1和Point2;  2:将Point1载入桢缓存,绘画第一个起始点;  3:计算常量x、y、2y和2(y-x),并且获得一个决策参数的第一个值:P = 2y-x;  4:从n=0开始,在沿线经过每个Xn处,进行下面的检测:   如果Pn<0,下一个点绘制的是(Xn+1,yn),并且Pn+1=Pn+2y如果P0>=0,下一个点绘制的是(Xn+1,Yn+1),并且Pn+1=Pn+2(y-x)

5、0; 5:重复执行x-1次步骤4;B,斜率k= 1或斜率k=0时候的算法  对于斜率等于0或者斜率等于1时候,不需要通过算法直接的对于其中单一坐标变量进行处理。C:斜率k<0的情况算法将起始点和中止点坐标Point1和Point2交换,可以转化到斜率为0和1之内的算法去实现 5 编码和测试5.1 编码系统源代码请详见附录2。关键代码分析主程序设置显示方式AL=02H,使用640*480图形显示模式,在主界面有1、2、3、4以及0四个选项。选择1可以输出一个自定义三角形,选择2可以输出一个直角三角形,选择3可以输出一个锐角三角形,选择4可以输出一个钝角三角形,在这调用input函

6、数来画图,画完调用output函数便可输出。选择0选项退出程序。MAIN:MOV AL,03h ;文本模式MOV AH,0 INT 10H LEA DX,MENMOV AH,09HINT 21HLEA DX,MENUMOV AH,09HINT 21HMOV AH,1INT 21HCMP AL,'1'自定义三角形JE GOCTCMP AL,'2'直角三角形JE GORTCMP AL,'3'锐角三角形JE GOATCMP AL,'4'钝角三角形JE GOOTCMP AL,'0'退出 JE QUIT HH JMP MAI

7、NGOCT:CALL CTJMP MAINGORT:CALL RTJMP MAINGOAT:CALL ATJMP MAINGOOT:CALL OTJMP MAINDrawPoint算法决定点的取舍,并将这些点连成线,得到的三条线首尾相连就构成了三角形DrawPoint PROC;画点PUSH CXPUSH AXMOV CX,XSTARTMOV DX,YSTARTMOV AL,1111BMOV AH,0CHINT 10HPOP AXPOP CXRETDrawPoint ENDPDrawLine PROC;画线MOV AX,XENDSUB AX,XSTARTMOV ADDX,AXMOV AX,YE

8、NDSUB AX,YSTARTMOV ADDY,AXCMP ADDX,0JE CHUIZHI;垂直CMP ADDY,0JE SHUIPING;水平MOV AX,ADDYCMP AX,0JL CMPXYKQUEDING:CMP ADDX,AXJG LINE1JMP LINE2CMPXY:NEG AX;求补JMP KQUEDINGLINE1:;K<1MOV SI,1MOV AX,ADDYCMP AX,0JG JISUANMOV SI,-1NEG ADDYJISUAN:MOV AX,ADDYADD AX,ADDYMOV ADD2Y,AXMOV AX,ADD2YSUB AX,ADDXMOV P,

9、AXMOV CX,ADDXLOOPLINE1:CALL DrawPointCALL DELAYADD XSTART,1CMP P,0JG YCHANGEMOV AX,ADD2YADD P,AXJMP GOYCHANGE:ADD YSTART,SIMOV AX,ADDYSUB AX,ADDXADD P,AXADD P,AXGO:LOOP LOOPLINE1JMP FINISHCHUIZHI:MOV SI,1MOV CX,ADDYMOV AX,YENDCMP YSTART,AXJG NEGSIYLOOPCHUIZHI:CALL DrawPointCALL DELAYADD YSTART,SILOO

10、P LOOPCHUIZHIJMP FINISHNEGSIY:MOV SI,-1NEG CXJMP LOOPCHUIZHISHUIPING:MOV SI,1MOV CX,ADDXMOV AX,XENDCMP XSTART,AXJG NEGSIXLOOPSHUIPING:CALL DrawPointCALL DELAYADD XSTART,SILOOP LOOPSHUIPINGJMP FINISHNEGSIX:MOV SI,-1NEG CXJMP LOOPSHUIPINGLINE2:;K>1MOV SI,1MOV AX,ADDYCMP AX,0JG JISUAN2MOV SI,-1NEG A

11、DDYJISUAN2:MOV AX,ADDXMOV BX,ADDXADD AX,BXMOV ADD2X,AXMOV AX,ADD2XSUB AX,ADDYMOV P,AXMOV CX,ADDYLOOPLINE2:CALL DrawPointCALL DELAYADD YSTART,SICMP P,0JG XCHANGEMOV AX,ADD2XADD P,AXJMP GO2XCHANGE:ADD XSTART,1MOV AX,ADDXSUB AX,ADDYADD P,AXADD P,AXGO2:LOOP LOOPLINE2JMP FINISHFINISH:RETDrawLine ENDP5.2

12、测试测试结果及分析,测试过程中遇到的主要问题及采取的解决措施。欢迎界面:直角三角形锐角三角形钝角三角形自定义三角形6 总结及建议 我这次编程是先搞需求分析,将程序分成几个功能模块,然后将功能一个一个地实现,这是一种比较好也比较快的编程方法,我感受到了分模块编程的的好处。 本程序的核心在于DrawPoint画线算法,有了画线算法后添加以输入输出,用户界面等模块既得到最终的程序。程序多次在图形模式和文本模式下切换,充分考虑到与用户的互动性,界面比较友好,功能简单实用。 程序首先在文本模式下显示欢迎界面,要求用户输入选项。程序可以根据用户选项直接输出直角三角形和锐角三角形及钝角三角形,或者输出用户自

13、定义三顶点的三角形。输出完成后按下任意键返回,显示选项,用户可以继续输出三角形或者按下0退出。 通过这个程序,我更加熟练了利用堆栈处理问题的方法,深入了对计算机图形显示技术的认识,掌握了BIOS调用的方法,对于子程序、顺序结构、循环结构、宏定义等的应用更加融会贯通。通过这次课程设计培养了我设计完成中小型程序的能力,加深了对汇编语言的认识。 一开始的时候自己编出来的程序有很多问题,尤其是在循环程序上,因此查阅了不少资料,也请教了好几个同学帮着修改,调试了好久才能正常运行。由于能力有限,程序还是有不完美的地方。这次的综合实验让我对汇编有了更深刻的认识,对各种指令有了进一步的理解。编程时也要能够坚持

14、,有时候一个功能在很短的时间内就能实现,但有的一天也弄不出来。在编程不顺意的时候,坚持、平常心将让我们的付出得到最好的回报。汇编语言的课程设计已经结束,这门课程在检验我们学习成绩的同时,也检验了我们的学习效果。我选择的是设计三角形,用到了基本上我所会的全部知识,但是在程序运行的过程中总是出现这样那样的问题,有的是我打程序打错了代码,有的是我理解错了知识点,导致程序错误。但在同学的帮助下,问题都一一的被解决。通过了这次设计,更加深了我对汇编语言的使用技巧,和做事的认真态度。汇编语言作为一种低级语言,编写程序起来本来就很吃力,很少的几种指令和代码。就增大了设计的难度。所以选择正确的设计方法尤为重要

15、。 经过为期二周的汇编语言课程设计,亲身感受体验敲、改写程序代码的乐趣,我对汇编语言有了较为深入的了解,不仅巩固了以前在课本上学到的知识,还学会了很多其他东西。通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的基本习惯和开发系统时应注意的流程。作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。 7 附录7.1 附录1 用户手册,即使用说明7.2 附录2 DATAS SEGMENT ;此处输入数据段代码MEN DB 0DH,0AH,' *' DB 0DH,0AH,' * Welcom to my program

16、,I am BAILONG:08 *' DB 0DH,0AH,' *$'MENU DB 0DH,0AH,'Please input number to chose a program:' DB 0DH,0AH,'*1.Custom Triangle*' DB 0DH,0AH,'*2.Right Triangle*' DB 0DH,0AH,'*3.Acute Triangle*' DB 0DH,0AH,'*4.Obtuse Triangle*' DB 0DH,0AH,'*0.Quit*

17、' DB 0DH,0AH,'*' DB 0DH,0AH,"Your choice: $" X1 DW ? Y1 DW ? X2 DW ? Y2 DW ? X3 DW ? Y3 DW ? XSTART DW ? YSTART DW ? XEND DW ? YEND DW ? P DW ? ADDX DW ? ADDY DW ? ADD2X DW ? ADD2Y DW ? POINT DB 24,?,24 DUP(?) BUFFER DB 6,?,6 DUP(?) ;输入函数暂存buffer MESS1_T DB 0DH,0AH,"Please

18、 input the frist point $" MESS2_T DB 0DH,0AH,"Please input the second point $" MESS3_T DB 0DH,0AH,"Please input the third point $ " MESS4_T DB 0DH,0AH,"X:$" MESS5_T DB 0DH,0AH,"Y:$" MESS6_T DB 0DH,0AH,"Input error$" ;此处输入数据段代码 C10 DW 10DATAS END

19、SSTACKS SEGMENTHH MACROPUSH AXPUSH DXMOV DL,0AH MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H POP DX POP AXENDMVIDEO MACROPUSH AX MOV AL,12H;640*480 320*200 256 MOV AL,13H MOV AH,0 INT 10H POP AXENDM;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX

20、;此处输入代码段代码 MAIN:MOV AL,03h ;文本模式MOV AH,0 INT 10H LEA DX,MENMOV AH,09HINT 21HLEA DX,MENUMOV AH,09HINT 21HMOV AH,1INT 21HCMP AL,'1'自定义三角形JE GOCTCMP AL,'2'直角三角形JE GORTCMP AL,'3'锐角三角形JE GOATCMP AL,'4'钝角三角形JE GOOTCMP AL,'0'退出 JE QUIT HH JMP MAINGOCT:CALL CTJMP MAIN

21、GORT:CALL RTJMP MAINGOAT:CALL ATJMP MAINGOOT:CALL OTJMP MAINDrawPoint PROC;画点PUSH CXPUSH AXMOV CX,XSTARTMOV DX,YSTARTMOV AL,1111BMOV AH,0CHINT 10HPOP AXPOP CXRETDrawPoint ENDPDrawLine PROC;画线MOV AX,XENDSUB AX,XSTARTMOV ADDX,AXMOV AX,YENDSUB AX,YSTARTMOV ADDY,AXCMP ADDX,0JE CHUIZHI;垂直CMP ADDY,0JE SHU

22、IPING;水平MOV AX,ADDYCMP AX,0JL CMPXYKQUEDING:CMP ADDX,AXJG LINE1JMP LINE2CMPXY:NEG AX;求补JMP KQUEDINGLINE1:;K<1MOV SI,1MOV AX,ADDYCMP AX,0JG JISUANMOV SI,-1NEG ADDYJISUAN:MOV AX,ADDYADD AX,ADDYMOV ADD2Y,AXMOV AX,ADD2YSUB AX,ADDXMOV P,AXMOV CX,ADDXLOOPLINE1:CALL DrawPointCALL DELAYADD XSTART,1CMP P,

23、0JG YCHANGEMOV AX,ADD2YADD P,AXJMP GOYCHANGE:ADD YSTART,SIMOV AX,ADDYSUB AX,ADDXADD P,AXADD P,AXGO:LOOP LOOPLINE1JMP FINISHCHUIZHI:MOV SI,1MOV CX,ADDYMOV AX,YENDCMP YSTART,AXJG NEGSIYLOOPCHUIZHI:CALL DrawPointCALL DELAYADD YSTART,SILOOP LOOPCHUIZHIJMP FINISHNEGSIY:MOV SI,-1NEG CXJMP LOOPCHUIZHISHUIP

24、ING:MOV SI,1MOV CX,ADDXMOV AX,XENDCMP XSTART,AXJG NEGSIXLOOPSHUIPING:CALL DrawPointCALL DELAYADD XSTART,SILOOP LOOPSHUIPINGJMP FINISHNEGSIX:MOV SI,-1NEG CXJMP LOOPSHUIPINGLINE2:;K>1MOV SI,1MOV AX,ADDYCMP AX,0JG JISUAN2MOV SI,-1NEG ADDYJISUAN2:MOV AX,ADDXMOV BX,ADDXADD AX,BXMOV ADD2X,AXMOV AX,ADD2

25、XSUB AX,ADDYMOV P,AXMOV CX,ADDYLOOPLINE2:CALL DrawPointCALL DELAYADD YSTART,SICMP P,0JG XCHANGEMOV AX,ADD2XADD P,AXJMP GO2XCHANGE:ADD XSTART,1MOV AX,ADDXSUB AX,ADDYADD P,AXADD P,AXGO2:LOOP LOOPLINE2JMP FINISHFINISH:RETDrawLine ENDPFUZHI MACRO PX1,PY1,PX2,PY2MOV AX,PX1MOV XSTART,AXMOV AX,PY1MOV YSTAR

26、T,AXMOV AX,PX2MOV XEND,AXMOV AX,PY2MOV YEND,AXENDMDELAY PROC NEAR ;三角延时PUSH CXMOV CX,00FFH DELAY1_T: PUSH CX MOV CX,00AFH DELAY2_T: LOOP DELAY2_T POP CX LOOP DELAY1_T POP CXRETDELAY ENDPINPUT_T PROC NEAR LEA SI,POINTLEA DX,MESS1_T MOV AH,9 INT 21H LEA DX,MESS4_T MOV AH,9 INT 21H ;显示输入提示信息xx1: CALL G

27、ETCHAR ;调用read输入3位数CMP AX,0 ;验证输入数字在要求的范围内jl wx1 cmp AX,600jg wx1 mov si,AX ;验证通过,输入下一个数jmp yy1 wx1:LEA DX,MESS6_T MOV AH,9 INT 21H ;验证失败,显示提示信息并重新输入jmp xx1 yy1: LEA DX,MESS5_T MOV AH,9 INT 21H CALL GETCHAR cmp AX,0 jl wy1 cmp AX,400 jg wy1 mov si+2,AX jmp xx2 wy1: LEA DX,MESS6_T MOV AH,9 INT 21H jm

28、p yy1xx2:LEA DX,MESS2_T MOV AH,9 INT 21H LEA DX,MESS4_T MOV AH,9 INT 21H ;显示输入提示信息CALL GETCHAR cmp AX,0 jl wx2 cmp AX,600 jg wx2 mov si+4,AX jmp yy2 wx2:LEA DX,MESS6_T MOV AH,9 INT 21H jmp xx2 yy2:LEA DX,MESS5_T MOV AH,9 INT 21H CALL GETCHAR cmp AX,0 jl wy2 cmp AX,400 jg wy2 mov si+6,AX jmp xx3 wy2:

29、LEA DX,MESS6_T MOV AH,9 INT 21H jmp yy2 xx3: LEA DX,MESS3_T MOV AH,9 INT 21HLEA DX,MESS4_T MOV AH,9 INT 21H ;显示输入提示信息CALL GETCHAR cmp AX,0 jl wx3 cmp dx,600 jg wx3 mov si+8,AX jmp yy3 wx3: LEA DX,MESS6_T MOV AH,9 INT 21H jmp xx3 yy3: LEA DX,MESS5_T MOV AH,9 INT 21H CALL GETCHAR cmp AX,0 jl wy3 cmp AX,400 jg wy3 mov si+10,AX ret wy3: LEA DX,MESS6_T MOV AH,9 INT 21H jmp yy3 INPUT_T ENDP ;输入子函数GETCHAR将数字转化为二进制存入AX中 GETCHAR PROC NEAR PUSH CX LEA DX,BUFFER MOV AH,0AH INT 21H MOV AX,0MOV CL,BUFFER+1 MOV CH,0 LEA BX,BUFFER+2 ONE: MUL C10 MOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论