画圆程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

DATASSEGMENTCOLORDW02BKCOLORDW15XDW?YDW?X1DW?Y1DW?TIPS1DB13,10,'Tips1:pleaseinputctodrawacircle',13,10,'$'TIPS2DB13,10,'systemcando1)pleaseinputcenterandradiustodrawacircle'DB13,10,'2)pleaseinputtwopointsasthetwoendpointsofthediameter'DB13,10,'Theresolutionratioofsystemis640*480,anditis16colors',13,10,'$'INF01DB13,10,'pleaseinputthehorizontalordinateofthecneter:$'INF02DB13,10,'pleaseinputtheverticalcoordinatesofthecneter:$'INF03DB13,10,'pleaseinputtheradiusofthcircle(R=240):$'INF04DB13,10,'pleaseinputthehorizontalordinateofonepoint:$'INF05DB13,10,'pleaseinputtheverticalcoordinatesofonepoint:$'INF06DB13,10,'pleaseinputthehorizontalordinateofanotherpoint:$'INF07DB13,10,'pleaseinputtheverticalcoordinatesofanotherpoint:$'BUFFERDB10,?,7DUP(?)RADIUSDW0TENDB10HRDDB100DATASENDSSTACKSSEGMENTDB200DUP(?)STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXOUTPUTMACROADDRESSMOVDX,OFFSETADDRESSMOVAH,09HINT21HENDMOUTPUTTIPS1;打印出系统提示MOVAH,01H;输入要选择的功能INT21HCMPAL,'c'JNZTENDOUTPUTTIPS2;打印出系统提示MOVAH,01H;输入要选择的项目INT21HCMPAL,'1'JNZOTHER;;;;;;;;;;;;;;;;;;;采取第一种模式输入OUTPUTINF01CALLINPUT_RADIUSMOVAX,RADIUSMOVX,AXOUTPUTINF02CALLINPUT_RADIUSMOVAX,RADIUSMOVY,AXOUTPUTINF03CALLINPUT_RADIUSJMPDRAW;;;;;;;;;;;;;;;;;;OTHER:;;;;;;;;;;;;;;;;;;;采取第二种模式输入OUTPUTINF04CALLINPUT_RADIUSMOVAX,RADIUSMOVX,AXOUTPUTINF05CALLINPUT_RADIUSMOVAX,RADIUSMOVY,AXOUTPUTINF06CALLINPUT_RADIUSMOVAX,RADIUSMOVX1,AXOUTPUTINF07CALLINPUT_RADIUSMOVAX,RADIUSMOVY1,AXMOVAX,XADDAX,X1SHRAX,1MOVBX,AXMOVAX,YADDAX,Y1SHRAX,1MOVCX,AXMOVAX,BXSUBAX,X1CMPAX,0JGZ0NEGAXZ0:MULAL;;;;此处有毛病MOVDX,AXMOVAX,CXSUBAX,Y1CMPAX,0JGZ1NEGAXZ1:MULALADDAX,DXMOVX,BXMOVY,CXCALLSQRTMOVRADIUS,AX;;;;;;;;;;;;;;;;;;DRAW:MOVAX,0A000HMOVES,AXMOVAX,0012HINT10H;设置640*480*16图形模式MOVAL,2CALLSET_WRITE_MODE;将写模式设为写模式2MOVAX,BKCOLORCALLCLEAR;将背景清成白色MOVAX,WORDPTR[X]PUSHAXMOVAX,WORDPTR[Y]PUSHAXMOVAX,WORDPTR[RADIUS]PUSHAXCALLCIRCLEMOVAH,01HINT21HTEND:MOVAX,4C00HINT21HMOVAH,4CHINT21H;;;以下均为主程序中用到的函数SQRTPROCPUSHBXPUSHCXMOVBX,0MOVCX,AXWHILELE:MOVAL,BLMULALCMPAX,CXJNBEENDWHILELE;;;;;;;此处用无符号数比较INCBXJMPWHILELEENDWHILELE:DECBXMOVAX,BXPOPCXPOPBXRETSQRTENDPINPUT_RADIUSPROCMOVRADIUS,0MOVDX,OFFSETBUFFERMOVAH,0AHINT21HMOVSI,OFFSETBUFFERMOVCL,[SI+1]CMPCL,3JNESECONDADDSI,2MOVAL,[SI]SUBAL,30HMULHRDMOVRADIUS,AXINCSIMOVAL,[SI]SUBAL,30HMULTENADDRADIUS,AXINCSIMOVAL,[SI]SUBAL,30HADDRADIUS,AXJMPCENDSECOND:CMPCL,2JNEFIRSTADDSI,2MOVAL,[SI]SUBAL,30HMULTENADDRADIUS,AXINCSIMOVAL,[SI]SUBAL,30HMOVAH,0HADDRADIUS,AXJMPCENDFIRST:ADDSI,2MOVAL,[SI]SUBAL,30HMOVAH,0HADDRADIUS,AXCEND:CMPRADIUS,240JBOOMOVRADIUS,240OO:RETINPUT_RADIUSENDP;******************************************;640*480*16模式下的画点函数;******************************************PIXELPROCPUSHBPPUSHBXPUSHCXPUSHDSMOVBP,SPMOVAX,80MOVBX,WORDPTR[BP+12];BX=YMULBX;(DX:AX)=80*YMOVBX,AX;MOVAX,WORDPTR[BP+14];AX--XMOVCL,8;||DIVCL;AL=商(X/8),AH=余数(X%8)SP-||MOVCL,AH;CL=AH|DS|-BPMOVAH,0;|CX|-BP+2ADDBX,AX;BX(OFFSET)=80*Y+X/8|BX|-BP+4MOVAL,80H;|BP|-BP+6SHRAL,CL;AL(MASK)=(80HCL)|返回地址|-BP+8PUSHAX;|COLOR|-BP+10MOVDX,3CEH;|Y|-BP+12MOVAL,8;|X|-BP+14OUTDX,AL;||MOVDX,3CFH;PIXEL堆栈结构POPAXOUTDX,ALMOVAL,ES:[BX]MOVAX,WORDPTR[BP+10];AX=COLORMOVBYTEPTRES:[BX],ALPOPDSPOPCXPOPBXPOPBPRET6PIXELENDP;********************************;清屏函数;********************************CLEARPROCNEARMOVBX,0CLR1:MOVES:[BX],ALINCBXCMPBX,9600H;80*480JNBCLR2JMPCLR1CLR2:RETCLEARENDP;***************************************;Bresenham算法实现的画圆函数;***************************************CIRCLEPROCNEARPUSHBPMOVBP,SPSUBSP,6MOVWORDPTR[BP-2],0;X=0||MOVAX,WORDPTR[BP+4];||MOVWORDPTR[BP-4],AX;Y=RSP-||MOVAX,0FFFEH;|P|-BP-6IMULWORDPTR[BP+4];AX=RADIUS*(-2)|Y|-BP-4ADDAX,3;AX=3-2*RADIUS|X|-BP-2MOVWORDPTR[BP-6],AX;P=3-2*RADIUS|BP|-BPC0:MOVAX,WORDPTR[BP-2];AX=X|返回地址|-BP+2CMPAX,WORDPTR[BP-4];IFXY,JMPC00|RADIUS|-BP+4JLC00;|YC|-BP+6JMPC3;|XC|-BP+8C00:PUSHWORDPTR[BP+8];CIRCLE堆栈结构PUSHWORDPTR[BP+6];PUSHWORDPTR[BP-2]PUSHWORDPTR[BP-4]CALLCIRCLE_POINTCMPWORDPTR[BP-6],0JGEC1MOVAX,4MULWORDPTR[BP-2]ADDAX,6ADDAX,WORDPTR[BP-6]MOVWORDPTR[BP-6],AXJMPC2C1:MOVAX,WORDPTR[BP-2]SUBAX,WORDPTR[BP-4]MOVBX,4IMULBXADDAX,10ADDAX,WORDPTR[BP-6]MOVWORDPTR[BP-6],AXDECWORDPTR[BP-4]C2:INCWORDPTR[BP-2]JMPC0C3:MOVAX,WORDPTR[BP-2]CMPAX,WORDPTR[BP-4]JNEC4PUSHWORDPTR[BP+8]PUSHWORDPTR[BP+6]PUSHWORDPTR[BP-2]PUSHWORDPTR[BP-4]CALLCIRCLE_POINTC4:MOVSP,BPPOPBPRET6CIRCLEENDPCIRCLE_POINTPROCNEARPUSHBPMOVBP,SPSUBSP,16MOVAX,WORDPTR[BP+10];ADDAX,WORDPTR[BP+6];MOVWORDPTR[BP-2],AX;XC+XMOVAX,WORDPTR[BP+10];SUBAX,WORDPTR[BP+6];MOVWORDPTR[BP-4],AX;XC-XMOVAX,WORDPTR[BP+10];||ADDAX,WORDPTR[BP+4];||MOVWORDPTR[BP-6],AX;XC+Y||MOVAX,WORDPTR[BP+10];SP-||SUBAX,WORDPTR[BP+4];|YC-Y|-BP-16MOVWORDPTR[BP-8],AX;XC-Y|YC+Y|-BP-14MOVAX,WORDPTR[BP+8];|YC-X|-BP-12ADDAX,WORDPTR[BP+6];|YC+X|-BP-10MOVWORDPTR[BP-10],AX;YC+X|XC-Y|-BP-8MOVAX,WORDPTR[BP+8];|XC+Y|-BP-6SUBAX,WORDPTR[BP+6];|XC-X|-BP-4MOVWORDPTR[BP-12],AX;YC-X|XC+X|-BP-2MOVAX,WORDPTR[BP+8];|BP|-BPADDAX,WORDPTR[BP+4];|返回地址|-BP+2MOVWORDPTR[BP-14],AX;YC+Y|Y|-BP+4MOVAX,WORDPTR[BP+8];|X|-BP+6SUBAX,WORDPTR[BP+4];|YC|-BP+8MOV

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功