




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 编程思想在程序设计时采用先整体再分块,模块化编程的思想。首先整体设计出程序的框架,写好主程序。再分模块写好各个子函数。调试好一个功能后再去编写下一个模块。主函数的主体是一个分支选择程序。包含了三个绘图模块圆,三角,矩形的数据定义和分支入口程序段。而三个绘图子模块中又各自包含了若干子函数。同时为了使程序紧凑,还编写了一些各个子模块公共使用的子函数。程序概要框架图如下图1:程序概要框架图3 程序设计3.
4、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_S 中。之后将屏幕的模式设为图像模式640
5、*480*16色,将长和宽一次存入CX中采用循环LOOP指令。保持X不变Y依次增加或者Y不变X依次增加将四条直线一一画出。同时为了使显示效果更好一些对线条进行了加粗,宽度为两个像素。为了使程序结构清晰编写了WRITE_PIXEL宏指令,每调用一次就画出一个点。而且可以认为的设定点的位置颜色等。在函数中还加入了延时子程序,每画完一个点之后就调用一个延时子程序。这样就可以在屏幕上实现动态显示。在这部分的程序设计中也是采用模块化的思想,先画出一条直线。改变参数就可以画出另外的三条直线。同时在屏幕模式设定时也编写宏指令SETMODE。调用的宏指令如下WRITE_PIXEL MACRO PAGE1,RO
6、W,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画线子程序中依次调用写像素子程序和延时子程序实现三条线段的动态显示。三角部分整体程序框架图如图4:三角子程序框架图Bresenham画线算
7、法是绘制三角形的核心程序,分析如下Bresenham算法是计算机图形学中为了“显示器(屏幕或打印机)系由像素构成”的这个特性而设计出来的算法,使得在求直线各点的过程中全部以整数来运算,因而大幅度提升计算速度。Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。其原理是过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。 该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项 的符号,就可以确定该列所求的像素。例如对于直线方程Y=kX+b;A:0<K<1时候的算法
8、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),并且Pn+1=Pn+2y如果P0>=0,下一个点绘制的是(Xn+1,Yn+1),并且Pn+1=Pn+2(y-x) 5:重复执行x-1次步
9、骤4;B:斜率k= 1或斜率k=0时候的算法 对于斜率等于0或者斜率等于1时候,不需要通过算法直接的对于其中单一坐标变量进行处理。C:斜率k<0的情况算法将起始点和中止点坐标Point1和Point2交换,可以转化到斜率为0和1之内的算法去实现。3.3圆形子程序设计图5:圆形子程序框架图在圆绘制模块中同样是采用Bresenham画线算法。先由键盘输入圆半径,再设置成图形模式。在调用圆Bresenham子程序将相关点堆栈,然后再调用圆画点子程序在屏幕上下左右四个点上向两边同时开始画点。每画一个点就调用一下延时子程序实现绘图的动态显示。3.4公共使用子程序设计为了使程序结构较清晰
10、,将三个子模块和主函数共同使用的子函数统一编写。它们是数据输入子函数READ可以讲键盘输入的数据转化为16进制存在AX中。在各个子函数的数据输入模块都是调用的这个子函数。还有写像素子函数PIXEL。它的作用是把经过Bresenham算法堆栈的数据用写像素的方法写在屏幕上。延时子函数DELAY它的作用是延时使图像动态显示。清屏CLEAR它的作用是调背景色清屏。便于在图形模式和文字模式之间进行转换。在其中的延时子程序采用了双层循环的方法,因为各个子程序运行用时不同为了便于调试和取得更好的效果。不同的子模块对应不同的延时子程序。4 硬件原理显示器有字符显示模式和图形显示两种工作方式在图形方式下的屏幕
11、由一个一个的像素做成。通过读写屏幕上的各个像素就可以显示出各种各样的图形。在汇编语言中提供了多种图形显示模式。设置模式的方法是:AL=模式号,AH=00H,然后通过BIOS功能调用INT10H来实现。表1常见的图形显示模式显示模式号分辨率色彩数适用显卡0DH320*20016EGA VGAOEH640*20016EGA VGA0FH640*3502EGA VGA10H640*35016EGA VGA11H640*4802MCGA VGA12H640*48016VGA13H320*200256MCGA VGAVGA显卡上256KB显存,被划分为4个64KB的位平面。比如屏幕上像素的位置是(X,Y
12、),则改像素在显存位平面中字节地址的计算公式为:字节地址=A0000H+Y*(640/8)+X MOD 8(屏幕中有640列,每字节8位)5 调试结果图6:主菜单截屏矩形绘制输入长168,宽100图7:矩形截屏三角形输入图8:三角形截屏图9:圆形截屏结束语这次的微机课设用的时间很久,从接到题目分析。到后来的程序编写调试费了很多的功夫。收获很多,一方面是专业知识。计算机怎么来显示图形,显存是怎么工作的。怎样将内容直接写到内存中在屏幕上反映出来。对这些知识有了更深入的了解,同时对于分支选择程序。子程序的调用压栈出栈断点保护有了更深入的理解。在程序就要调试完成的时候突然发现了一个致命的错误。画完圆之
13、后无法再画矩形。为了排查这个问题花了好长的时间一直没有解决。后来经过请教同学和仔细的思考后发现。在画圆程序中使用过CX,而在画矩形时矩形的大小是由CX来决定的。虽然前面加入了压栈出栈,但是CX值已经被改变了。再写入数据后只是把低位覆盖高位仍然是有数据的。就造成了程序的错误。类似这样的错误还有很多。调试程序的过程也是一个不断检测错误不断反思的过程。而且通过这次课设更是深入的体会到汇编语言做为底层语言在速度和大小方面有着很强的优势。程序很小但是运行速度很快,功能能够实现的也很多。更重要的是可以直接的控制计算机的硬件。在另一方面的收获就是兴趣也许在一开始时是很重要的,之后让人坚持下去的就是克服困难的
14、勇气和决心。为了让程序的功能更加的多样化,我尝试着在其中添加各种各样的子程序。大部分的想法都实现了,可以画出任意的三角,矩形和圆。但是原本设想的图形移动和加入声音因为时间的原因没有再做。算是一点遗憾吧。在这次课设中自己也犯了一个错误,写比较大的程序时最好是和别人分工合作。相互讨论这样做的会更加完美一些,特别是在程序调试时有人商量一下是很好的可以发现一些自己不容易发现的问题和错误。在这方面因为其他人想做别的题目所以没有这么做。总的来说收获很多,想起了以前上的一门选修课。夏老师讲的先整体再部分来设计系统。还有对问题的思考方法在这次课设中让我少走了很多弯路。参考文献1. 新编汇编语言程序设计,杨文显
15、2. 微机原理与接口技术,周佩玲3. 80X86汇编语言程序设计,王元珍4. 汇编程序三角形画法,李永飞附录1主序代码部分INCLUDE YLIB.HDATAS SEGMENT;*;主函数菜单使用的提示字符串;* MESS1 DB 0DH,0AH, 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
16、 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 $"*;各个子函数公共使用的数据定义部分
17、;*COLOR DW 02 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
18、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,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 0
19、DH,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,0AH,"Y:$"MESS7_T DB 0DH,0AH,"Input error$"DATAS ENDSSTACK
20、S 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,MESS5MOV AH,9INT 21HLEA DX,MESS9MOV AH,9INT 21HLEA DX,MESS
21、6MOV AH,9INT 21H;*;主菜单选择部分;*INPUT:MOV AH,1INT 21HCMP AL,'1'JB DISPLAYJE SQUARCMP AL,'2'JE TRIACMP AL,'3'JE CRICCMP AL,'q'JE OUTPUTJMP DISPLAYSQUAR: ;矩形子程序的入口部分CALL SQUAR_PJMP OUTPUTTRIA: ;三角子程序的入口部分CALL TRIA_PJMP OUTPUTCRIC: ;圆形子程序的入口部分CALL CRIC_PJMP OUTPUTOUTPUT:;退出程
22、序段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,MESS2_SMOVAH,9IN
23、T 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 0,Y_S,X_S,CO
24、LOR_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_SXOR CX,CXMOV C
25、X,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,'1'JE LONGCMP AL,'0'JE DISPLAYCMP AL,'q'JE OUTPUTPOPCXJEOUTPUTRETSQUAR_P
26、ENDP;*;三角绘制子程序;*TRIA_P PROC NEARPUSH CXCALL INPUT_T MOV AH,0FHINT 10HMOV OL_T,AL;保存原来屏幕格式,用来恢复的MOV AX,0A000H ;显存MOV ES,AX SETMODE 12H;设置640*480*16图形模式 ? LEA SI,POINT NEXT: MOV AX,0012H INT 10H MOV AL,2 CALL SET_WRITE_MODE MOV AX,BKCOLOR CALL CLEAR;将背景清成黑色CALL OUTPUT_T;调用输出子函数 MOVAH,0INT 16H MOV AH,0
27、MOV AL,OL_TINT 10H LEA DX,MESS3_S;提示菜单MOVAH,9INT21HMOV AH,1INT 21HCMPAL,'0'JE DISPLAYCMP AL,'q'POP CXJE OUTPUTRETTRIA_P ENDP;*;圆绘制子程序;*CRIC_P PROC NEARMOV AX,DATAS MOV DS,AX INPUT_C:;半径输入程序段LEA DX,MESS1_CMOV AH,9INT 21HCALLREADCMP AX,0JB RADIUS_ERCMP AX,0C8HJA RADIUS_ERMOV WORD PTR R
28、ADIUS,AXJMPNEXT_CRADIUS_ER:;输入错误时提示CALL INPUT_ERJMP INPUT_CNEXT_C:MOVAH,0FHINT 10HMOV OL_C,AL;保存原来屏幕格式,用来恢复的MOV AX,0A000H ;显存MOV ES,AX SETMODE 12HINT 10H ;设置640*480*16图形模式 ?MOVAL,2 CALL SET_WRITE_MODE ;将写模式设为写模式2MOV AX,BKCOLOR CALL CLEAR ;将背景清成黑色 MOV AX,WORD PTR X ;将圆心坐标和半径压栈PUSH AX MOV AX,WORD PTR
29、Y PUSH AX MOV AX,WORD PTR RADIUS PUSH AX CALL CIRCLE;调用画圆子程序MOV AH,0;恢复成文本格式的INT 16H MOV AH,0MOV AL,OL_CINT 10H LEA DX,MESS7;提示菜单MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,'0'JE DISPLAYCMP AL,'q'JE OUTPUTRETCRIC_P ENDP;*;画像素点子程序;*PIXEL PROC PUSH BP ;压栈保护PUSH BX PUSH CX PUSH DS MOV BP,SP MO
30、V AX,80 MOV BX,WORD PTRBP+12 ;BX<=Y MUL BX ;(DX:AX)<=80*Y MOV BX,AX MOV AX,WORD PTRBP+14 ;AX<-X MOV CL,8 DIV CL ;AL<=商(X/8),AH<=余数(X%8) SP-> | | MOV CL,AH ;CL<=AH | DS |<-BP MOV AH,0 ; | CX |<-BP+2 ADD BX,AX ;BX(OFFSET)<=80*Y+X/8 | BX |<-BP+4 MOV AL,80H ; | BP |<-
31、BP+6 SHR AL,CL ;AL(MASK)<=(80H>>CL) |返回地址|<-BP+8 PUSH AX ; | COLOR |<-BP+10 MOV DX,3CEH ; | Y |<-BP+12 MOVAL,8 ; | X |<-BP+14 OUT DX,AL ; | | MOV DX,3CFH ; PIXEL堆栈结构 POP AX OUT DX,AL MOV AL,ES:BX MOV AX,WORD PTRBP+10 ;AX<=COLOR MOV BYTE PTR ES:BX,AL POP DS POP CX POP BX POP B
32、P RET 6 PIXEL ENDP ;*;清屏函数 ;*CLEAR PROC NEAR MOV BX,0 CLR1: MOV ES:BX,AL;ES中放的是显存的地址 INCBX CMP BX,9600H;80*480 JNB CLR2 JMP CLR1 CLR2: RET CLEAR ENDP ;*;Bresenham算法实现的画圆函数 ;*CIRCLE PROC NEAR PUSH BP MOVBP,SP SUB SP,6 MOV WORD PTRBP-2,0 ;X<=0 | | MOV AX,WORD PTRBP+4 ; | | MOV WORD PTRBP-4,AX;Y<
33、=R SP-> | | MOV AX,0FFFEH ; | P |<-BP-6 IMUL WORD PTRBP+4 ;AX<=RADIUS*(-2) | Y |<-BP-4 ADD AX,3 ;AX<=3-2*RADIUS | X |<-BP-2 MOV WORD PTRBP-6,AX ;P=3-2*RADIUS | BP |<-BP C0:MOV AX,WORD PTRBP-2 ;AX<=X |返回地址|<-BP+2 CMP AX,WORD PTRBP-4 ;IF X<Y,JMP C00 | RADIUS |<-BP+4 JL
34、 C00 ; | YC |<-BP+6 JMP C3 ; | XC |<-BP+8 C00: PUSH WORD PTRBP+8 ; CIRCLE堆栈结构 PUSH WORD PTRBP+6 ; PUSH WORD PTRBP-2 PUSH WORD PTRBP-4 CALL CIRCLE_POINT CMP WORD PTRBP-6,0 JGE C1 MOV AX,4 MUL WORD PTRBP-2 ADDAX,6 ADD AX,WORD PTRBP-6 MOVWORD PTRBP-6,AX JMP C2 C1: MOV AX,WORD PTRBP-2 SUB AX,WORD
35、PTRBP-4 MOV BX,4 IMUL BX ADD AX,10 ADD AX,WORD PTRBP-6 MOV WORD PTRBP-6,AX DEC WORD PTRBP-4 C2: INC WORD PTRBP-2 JMP C0 C3: MOV AX,WORD PTRBP-2 CMP AX,WORD PTRBP-4 JNE C4 PUSH WORD PTRBP+8 PUSH WORD PTRBP+6 PUSH WORD PTRBP-2 PUSH WORD PTRBP-4 CALL CIRCLE_POINT C4: MOV SP,BP POP BP RET 6 CIRCLE ENDP
36、;*;圆画点子程序;*CIRCLE_POINT PROC NEAR PUSH BP MOV BP,SP SUB SP,16 MOV AX,WORD PTRBP+10 ADD AX,WORD PTRBP+6 MOV WORD PTRBP-2,AX ;XC+X MOV AX,WORD PTRBP+10 SUB AX,WORD PTRBP+6 MOV WORD PTRBP-4,AX ;XC-X MOV AX,WORD PTRBP+10 ; | | ADD AX,WORD PTRBP+4 ; | | MOVWORD PTRBP-6,AX ;XC+Y | | MOV AX,WORD PTRBP+10 ;
37、 SP-> | | SUB AX,WORD PTRBP+4 ; | YC-Y |<-BP-16 MOV WORD PTRBP-8,AX ;XC-Y | YC+Y |<-BP-14 MOV AX,WORD PTRBP+8 ; | YC-X |<-BP-12 ADD AX,WORD PTRBP+6 ; | YC+X |<-BP-10 MOV WORD PTRBP-10,AX ;YC+X | XC-Y |<-BP-8 MOV AX,WORD PTRBP+8 ; | XC+Y |<-BP-6 SUB AX,WORD PTRBP+6 ; | XC-X |<
38、-BP-4 MOV WORD PTRBP-12,AX ;YC-X | XC+X |<-BP-2 MOV AX,WORD PTRBP+8 ; | BP |<-BP ADD AX,WORD PTRBP+4 ; |返回地址|<-BP+2 MOV WORD PTRBP-14,AX ;YC+Y | Y |<-BP+4 MOV AX,WORD PTRBP+8 ; | X |<-BP+6 SUB AX,WORD PTRBP+4 ; | YC |<-BP+8 MOV WORD PTRBP-16,AX ;YC-Y | XC |<-BP+10 PUSH WORD PTRB
39、P-2 ; | | PUSH WORD PTRBP-14 ; CIRCLE_POINT堆栈结构 PUSH COLOR CALL PIXELCALL DELAY_C PUSH WORD PTRBP-4 PUSH WORD PTRBP-14 PUSH COLOR CALL PIXELCALL DELAY_C PUSH WORD PTRBP-2 PUSH WORD PTRBP-16 PUSH COLOR CALL PIXELCALL DELAY_C PUSH WORD PTRBP-4 PUSH WORD PTRBP-16 PUSH COLOR CALL PIXEL CALL DELAY_C PUSH
40、 WORD PTRBP-6 PUSH WORD PTRBP-10 PUSH COLOR CALL PIXELCALL DELAY_C PUSH WORD PTRBP-8 PUSH WORD PTRBP-10 PUSH COLOR CALL PIXEL CALL DELAY_CPUSH WORD PTRBP-6 PUSH WORD PTRBP-12 PUSH COLOR CALL PIXELCALL DELAY_C PUSH WORD PTRBP-8 PUSH WORD PTRBP-12 PUSH COLOR CALL PIXEL CALL DELAY_C MOV SP,BP POP BP RE
41、T 8 CIRCLE_POINT ENDP ;*;设置写模式的函数 ;*SET_WRITE_MODE PROC NEAR PUSH AX MOV DX,3CEH MOV AL,5 OUT DX,AL MOV DX,3CFH POP AX OUT DX,AL MOV DX,3CEH MOV AL,8 OUT DX,AL MOV DX,3CFH MOV AL,0FFH OUT DX,AL RET SET_WRITE_MODE ENDP;*;输入子函数READ将数字转化为二进制存入AX中;*READ PROC NEARPUSH CXLEA DX,BUFFERMOVAH,0AHINT 21HMOV A
42、X,0MOV CL,BUFFER+1MOV CH,0LEA BX,BUFFER+2ONE:MUL C10MOV DL,BXAND DL,0FHADD AL,DLADC AH,0INCBXLOOP ONEPOP CXRETREAD ENDP;*;输入错误提示子程序共用部分;*INPUT_ER PROC NEAR PUSH CX PUSH AX PUSHDX LEA DX,MESS8MOV AH,9INT 21H POP DXPOP AX POP CX RETINPUT_ER ENDP;* ;三角输出的子函数;*OUTPUT_T PROC NEAR MOV CX,3DDD: ;将指定三角形的三顶点
43、坐标压栈PUSH CX ;压栈按照line函数要求的规则 PUSH SI MOV AX,SI PUSH AX MOV AX,SI+2 PUSH AX MOV AX,SI+4 PUSHAX MOV AX,SI+6 PUSH AX CALL LINE_T;使用延时函数实现动画效果 CALL DELAY_T ;调用Line函数画线 POP SI ADD SI,8 POP CX LOOP DDDRETOUTPUT_T ENDP ;*;三角Bresenham画线算法 ;*LINE_T PROC NEAR PUSH BP MOV BP,SP SUB SP,16 MOV WORD PTRBP-6,0 ;X=0 MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025农产品采购合同协议范本
- 楼面排水合同协议书范本
- 2025蔬菜购销合同范本
- 商品酒买卖交易合同协议
- 吸塑年度采购合同协议
- 品牌合作产权合同协议
- 橱柜组装服务合同协议
- 2025年租赁合同样本:国有土地租赁合同
- 2025协同研发委托合同
- 2025中文合同书的语言特点
- 湖南省名校联考联合体2024-2025学年高一下学期期中考试物理试题 含答案
- GB/T 26361-2025旅游餐馆设施与服务要求
- 电动汽车安全驾驶培训
- 短视频平台对独立音乐人的影响研究-全面剖析
- 2024年国家广播电视总局直属事业单位招聘真题
- 低空空域协同管理机制:探索与研究
- 成人重症患者颅内压增高防控护理专家共识(2024版)解读课件
- 中国急性缺血性卒中诊治指南解读(完整版)
- 水磨钻专项方水磨钻专项方案
- 在线监测运维管理体系
- 我爱刷牙幼儿课件
评论
0/150
提交评论