汇编语言课程设计绘制三角形图形程序.docx

上传人:b****2 文档编号:1251132 上传时间:2023-04-30 格式:DOCX 页数:16 大小:121.59KB
下载 相关 举报
汇编语言课程设计绘制三角形图形程序.docx_第1页
第1页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第2页
第2页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第3页
第3页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第4页
第4页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第5页
第5页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第6页
第6页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第7页
第7页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第8页
第8页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第9页
第9页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第10页
第10页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第11页
第11页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第12页
第12页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第13页
第13页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第14页
第14页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第15页
第15页 / 共16页
汇编语言课程设计绘制三角形图形程序.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编语言课程设计绘制三角形图形程序.docx

《汇编语言课程设计绘制三角形图形程序.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计绘制三角形图形程序.docx(16页珍藏版)》请在冰点文库上搜索。

汇编语言课程设计绘制三角形图形程序.docx

汇编语言课程设计绘制三角形图形程序

 

课程设计说明书

 

课程名称:

汇编语言

班级:

姓名:

___

学号:

____

设计题目:

绘制三角形图形程序

设计时间:

2010/6/21至2010/7/2

指导教师:

李永飞

评语:

_________________________________

_________________________________________

_________________________________________

_________________________________________

_________________________________________

评阅成绩:

评阅教师:

 

一、课程设计目的

进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。

二、课程设计要求

1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。

2.遵循模块化、结构化的程序设计方法。

3.要求程序必须正确。

4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。

5.要求程序结构合理,语句使用得当。

6.适当追求编程技巧和程序运行效率。

三、课程设计题目:

绘制三角形图形程序

四、课题分析

编写程序.使PC机显示一个三角形。

对于图形设计,要通过BIOSINT10H调用,用菜单选择三角形的输出。

三角形可分割为3条直线,因此显示三角形就可分解为根据两点画直线的程序。

五、流程图:

Q

 

六、核心代码展示:

1、主函数

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACKS

START:

MOVAX,DATA

MOVDS,AX

MOVAX,0A000H

MOVES,AX

MOVAX,0012H;设置640*480*16图形模式

INT10H

reset:

;02文字模式显示主界面

MOVAX,0002H;根据用户输入调用相关功能

INT10H

dispdesk

movah,01h

int21h

cmpal,'A'

jzzj

cmpal,'B'

jzdy

cmpal,'C'

jzzdy

cmpal,'Q'

jzgoover

jmpreset

zj:

;输出直角三角形

CALLINPUTCOLOR

dispcrlf

leasi,zhijiao

jmpnext

dy:

;输出等腰三角形

CALLINPUTCOLOR

dispcrlf

leasi,dengyao

jmpnext

zdy:

;调用input函数自定义三角形

CALLINPUTCOLOR

dispcrlf

CALLinput

leasi,point

jmpnext

next:

;调用output函数输出指定的三角形

MOVAX,0012H

INT10H;设置640*480*16图形模式

MOVAL,2

CALLSET_WRITE_MODE

MOVAX,BKCOLOR

CALLCLEAR

calloutput

MOVAH,1

INT21H

JMPRESET

goover:

;程序结束

MOVAH,0;清屏

MOVAL,12H

INT10H

RET

MAINENDP

2、Bresenham画线算法

PIXELprocnear

PUSHBP

PUSHBX

PUSHCX

PUSHDS

MOVBP,SP

MOVAX,80

MOVBX,WORDPTR[BP+12];BX<=Y

MULBX;(DX:

AX)<=80*Y

MOVBX,AX

MOVAX,WORDPTR[BP+14];AX<--X

MOVCL,8;

DIVCL;AL<=商(X/8),AH<=余数(X%8)

MOVCL,AH;CL<=AH

MOVAH,0;

ADDBX,AX;BX(OFFSET)<=80*Y+X/8

MOVAL,80H;

SHRAL,CL;AL(MASK)<=(80H>>CL)

PUSHAX

MOVDX,3CEH

MOVAL,8

OUTDX,AL

MOVDX,3CFH

POPAX

OUTDX,AL

MOVAL,ES:

[BX]

MOVAX,WORDPTR[BP+10];AX<=COLOR

MOVBYTEPTRES:

[BX],AL

POPDS

POPCX

POPBX

POPBP

RET6

pixelendp

;------------------------------

;Bresenham画线算法

LINEprocnear

PUSHBP

MOVBP,SP

SUBSP,16

MOVWORDPTR[BP-6],0;X=0

MOVWORDPTR[BP-8],0;Y=0

MOVWORDPTR[BP-14],1;INCX=1

MOVWORDPTR[BP-16],1;INCY=1

MOVAX,WORDPTR[BP+6];AX<=X2

SUBAX,WORDPTR[BP+10];AX<=X2-X1

JNCL1;IFX2>=X1,JMPL1

NEGAX;IFX2

MOVWORDPTR[BP-14],-1;INCX<=-1

L1:

CMPAX,0;IFDELTA_X!

=0,JMPL11

JNEL11

MOVWORDPTR[BP-14],0;INCX<=0

L11:

MOVWORDPTR[BP-10],AX;DELTA_X<=AX

MOVAX,WORDPTR[BP+4];AX<=Y2

SUBAX,WORDPTR[BP+8];AX<=Y2-Y1

JNCL2;IFY2>=Y1,JMPL2

NEGAX;IFY2

MOVWORDPTR[BP-16],-1;INCY<=-1

L2:

;

CMPAX,0;IFDELTA_Y!

=0,JMPL22

JNEL22;

MOVWORDPTR[BP-16],0;INCY<=0

L22:

MOVWORDPTR[BP-12],AX;DELTA_Y<=AX

LP4:

MOVAX,WORDPTR[BP-10];AX<=DELTA_X

CMPAX,WORDPTR[BP-12];

JGLP5;DELTA_X>DELTA_Y

MOVAX,WORDPTR[BP-12];

MOVWORDPTR[BP-4],AX;DISTANCE<=DELTA_Y

JMPLP51;

LP5:

MOVAX,WORDPTR[BP-10];

MOVWORDPTR[BP-4],AX;DISTANCE<=DELTA_X

LP51:

INCAX

MOVWORDPTR[BP-2],AX

LP6:

PUSHWORDPTR[BP+10]

PUSHWORDPTR[BP+8]

PUSHCOLOR

CALLPIXEL

MOVAX,WORDPTR[BP-6];AX<=X

ADDAX,WORDPTR[BP-10];AX<=X+DELTA_X

MOVWORDPTR[BP-6],AX;X=X+DELTA_X

MOVAX,WORDPTR[BP-8];AX<=Y

ADDAX,WORDPTR[BP-12];AX<=Y+DELTA_Y

MOVWORDPTR[BP-8],AX;Y=Y+DELTA_Y

MOVAX,WORDPTR[BP-6];AX<=X

CMPAX,WORDPTR[BP-4]

JLELP7;IFX<=DISTANCE,JMPLP7

MOVAX,WORDPTR[BP-6];X>DISTANCE

SUBAX,WORDPTR[BP-4];AX<=X-DISTANCE

MOVWORDPTR[BP-6],AX;X=X-DISTANCE

MOVAX,WORDPTR[BP+10];AX<=X1

ADDAX,WORDPTR[BP-14];AX<=X1+INCX

MOVWORDPTR[BP+10],AX;X1=X1+INCX

LP7:

MOVAX,WORDPTR[BP-8];AX<=Y

CMPAX,WORDPTR[BP-4]

JLELP8;IFY<=DISTANCE,JMPLP8

MOVAX,WORDPTR[BP-8];Y>DISTANCE

SUBAX,WORDPTR[BP-4];AX<=Y-DISTANCE

MOVWORDPTR[BP-8],AX;Y=Y-DISTANCE

MOVAX,WORDPTR[BP+8];AX<=Y1

ADDAX,WORDPTR[BP-16];AX<=Y1+INCY

MOVWORDPTR[BP+8],AX;Y1=Y1+INCY

LP8:

DECWORDPTR[BP-2];IFT!

=0,JMPLP6

JZLP9

JMPLP6

LP9:

MOVSP,BP

POPBP

RET8

lineendp

3、自定义三角形顶点位置

INPUTPROCNEAR

leasi,point

DISPinputINFO_1;显示输入提示信息

xx1:

dispx

CALLgetchar;调用getchar输入3位数

cmpdx,0;验证输入数字在要求的范围内

jlwx1

cmpdx,600

jgwx1

mov[si],dx;验证通过,输入下一个数

mov[si+8],dx

jmpyy1

wx1:

dispinputwrong;验证失败,显示提示信息并重新输入

jmpxx1

yy1:

dispy

CALLgetchar

cmpdx,0

jlwy1

cmpdx,400

jgwy1

mov[si+2],dx

mov[si+10],dx

DISPinputINFO_2

jmpxx2

wy1:

dispinputwrong

jmpyy1

xx2:

dispx

CALLgetchar

cmpdx,0

jlwx2

cmpdx,600

jgwx2

mov[si+4],dx

mov[si+16],dx

jmpyy2

wx2:

dispinputwrong

jmpxx2

yy2:

dispy

CALLgetchar

cmpdx,0

jlwy2

cmpdx,400

jgwy2

mov[si+6],dx

mov[si+18],dx

DISPinputINFO_3

jmpxx3

wy2:

dispinputwrong

jmpyy2

xx3:

dispx

CALLgetchar

cmpdx,0

jlwx3

cmpdx,600

jgwx3

mov[si+12],dx

mov[si+20],dx

jmpyy3

wx3:

dispinputwrong

jmpxx3

yy3:

dispy

CALLgetchar

cmpdx,0

jlwy3

cmpdx,400

jgwy3

mov[si+14],dx

mov[si+22],dx

ret

wy3:

dispinputwrong

jmpyy3

INPUTENDP

4、置堆栈并调用LINE画线

outputprocnear

movcx,3

DDD:

;将指定三角形的三顶点坐标压栈

PUSHCX;压栈按照line函数要求的规则

PUSHSI

MOVAX,[SI]

PUSHAX

MOVAX,[SI+2]

PUSHAX

MOVAX,[SI+4]

PUSHAX

MOVAX,[SI+6]

PUSHAX

CALLLINE;调用Line函数画线

POPSI

ADDSI,8

POPCX

LOOPDDD

ret

outputendp

七、结果显示

八、感想、收获及体会

本程序的核心在于Bresenham画线算法,有了画线算法后添加以输入输出,用户界面等模块既得到最终的程序。

程序多次在图形模式和文本模式下切换,充分考虑到与用户的互动性,界面比较友好,功能简单实用。

程序在windowsxp下测试通过。

程序首先在文本模式下显示欢迎界面,要求用户输入选项。

程序可以根据用户选项直接输出直角三角形和等腰三角形,或者输出用户自定义三顶点的三角形,每次输出图形都可由用户自定义输出颜色。

输出完成后按下任意键清屏,显示选项,用户可以继续输出三角形或者按下Q退出。

在BIOS调用方面本程序采用了多种写屏方式,力求每种功能实现采用相应的最简算法。

设计程序初考虑过使用Int33h调用鼠标,是程序更加人性化,但是由于技术原因和设备显示难以实现,实在遗憾。

下面分析Bresenham画线算法。

对于直线方程Y=kX+b;

A:

0

 1:

输入线段的两个端点Point1和Point2,并且存储到Point1(x1,y1)和Point2(x2,y2)中;

 2:

将Point1载入桢缓存,绘画第一个起始点;

 3:

计算常量△x、△y、2△y和2(△y-△x),并且获得一个决策参数的第一个值:

P=2△y-△x;

 4:

从n=0开始,在沿线经过每个Xn处,进行下面的检测:

   如果Pn<0,下一个点绘制的是(Xn+1,yn),并且Pn+1=Pn+2△y

如果P0>=0,下一个点绘制的是(Xn+1,Yn+1),并且Pn+1=Pn+2(△y-△x)

 5:

重复执行△x-1次步骤4;

B,斜率k=1或斜率k=0时候的算法

 对于斜率等于0或者斜率等于1时候,不需要通过算法直接的对于其中单一坐标变量进行处理。

C:

斜率k<0的情况算法

将起始点和中止点坐标Point1和Point2交换,可以转化到斜率为0和1之内的算法去实现

用汇编语言实现该算法的代码已经在上面贴出。

以下是两个子函数的堆栈结构。

通过这个程序,我更加熟练了利用堆栈处理问题的方法,深入了对计算机图形显示技术的认识,掌握了BIOS调用的方法,对于子程序、顺序结构、循环结构、宏定义等的应用更加融会贯通。

通过这次课程设计培养了我设计完成中小型程序的能力,加深了对汇编语言的认识。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

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

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