资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
汇编语言程序设计期末大作业汇编语言程序设计期末大作业仔细阅读课本第十章有关写显示缓存的方法以及 INT 10H 功能调用说明。参考附件给出的图形显示方法,完成期末作业。以下题目从易到难,期末分值与难度大小成正比。可任选一题,完成后提交纸质报告,报告内容包含题目、算法流程、模块功能说明、源代码(含详细注释) 、实验结果截图、总结。作业由班长、学习委员收齐后于日期为 2013 年 6 月 24 日交(具体时间到时候联系) 。 题题 1. 游戏程序常常用随机数来控制其图形在屏幕上移动。请编写一程序,用随机数来控制笑脸符(ASCII 码 02H)显示的位置。笑脸符每次显示的列号总是递增 1。而行的位置可能是前次的上一行,下一行或同一行,这根据随机数是 0、1 或 2 来决定,当行号变为 0、24 或列号变为 79 时显示结束。笑脸在每个位置上显示若干毫秒(具体时间自行设计) 。(提示:INT 1AH 的AH=0 是读当前时间的功能调用,利用该功能返回的随时都在变化的时间值作为产生随机数的基数。见课本第十章练习);题题 2. 参参考附件实例,显示一如下形状的拖拉机从左向右行驶;题题 3. 参考附件实例,将一小球(圆)沿着如半径为 300 像素的上半圆周移动(如同) ;题题 4. 参考附件实例,将一小球沿着抛物线形式起降,运行路线如下图所示(建议选用抛物线方程 y-y0=a*(x-x0)(x-x0),每次顶点高度是上次高度的 80%) ;题题 5. 参参考附件实例,将实例中的空心圆编程实心圆显示完成题题 2-题题 4 中一个。难度级在相应题目上提高半级。附件说明:附件说明:(1)通过 INT 10H 的不同的功能号(AH)的选择可实现获取当前显示器工作方式、设置显示器显示方式。(2)在图形工作方式下调用 INT 10H 可以实现用颜色写像素。查看附件代码中的 WritePixel 子程序。(3)画水平线段和画圆周曲线查看子程序 HorLine 和 Circle,以上题目中可能需要自行添加画垂直直线段的子程序。(4)注意画线、画圆周子程序都使用了写点子程序 WritePixel,而写点子程序对点先去原来颜色,颜色字节的每个二进制位求反来显示该像素,这样做的好处是要擦除画的点、线时,只要再反色写点或画线就可以了。(5)花大概 3-4 天时间仔细阅读附件实例,后只要 1-2 天的时间修改实例就可以做完上面任意一个题目。附件:附件:;This example can introduce you to finish the Assembly excise quickly. ;Chenggen Yang, NanChang University, 2013.06.12STACK SEGMENT STACKDW 100H DUP(?)TOS EQU $ STACK ENDS;主程序段 CODE SEGMENT ASSUME CS:CODE START: MOV AX,STACKMOV SS,AXMOV SP,TOS ;设置堆栈栈顶MOV AH,0FHINT 21HPUSH AX ;获取当前的显示方式,并将它保护到堆栈里MOV AX,12HINT 10H ;将屏幕显示方式设置为 VGA (640*480)彩色方式MOV DX,400MOV SI,0MOV DI,639CALL HorLine ;在第 402 行画直线MOV CX,9 ;CX 存放圆周半径MOV SI,CX MOV DI,400SUB DI,CX ;SI 和 DI 分别存放圆心横坐标和纵坐标 ;下面代码显示从左到右滚动的圆周DrawAgain: CALL Circle ;画圆周CALL Delay ;延时CALL Circle ;擦除圆周CALL Delay ;延时INC SICMP SI,640 JNZ DrawAgain ;圆心从左到右循环画圆和擦除圆 ;下面代码显示落下和回弹的小球(圆周)MOV BX,CX ;CX 存放圆周半径NEG BXADD BX,400MOV DX,BX ;DX 存放小球落地是圆心纵坐标MOV BX,CX ;BX 存放小球弹起到顶点的纵坐标MOV AX,0 ;AX 存放小球是落下(0)还是上升(1)的状态MOV SI,320 ;SI 存放小球落下和弹起所在的横坐标。MOV DI,CX ;对 DI 加 1 或减 1 来实现小球下落和上升。 (SI,DI)为圆心。L_DOWN: CALL CircleCALL DelayCALL CircleCALL DelayTEST AX,1JNZ L_UP ;转向圆上升INC DICMP DI,DXJBE L_DOWN ;未到达底部继续下降PUSH AXPUSH USH CXMOV AX,DXSUB AX,BXSHL AX,1SHL AX,1XOR DX,DXMOV BX,5DIV BXMOV BX,AX ;到达底部计算下一次上升高度POP CXPOP OP AX CMP BX,0 ;下次上升高度是 0,则结束JZ EXITNEG BXADD BX,DX ;上升顶点行MOV AX,1JMP L_DOWNL_UP: ;上升处理DEC DICMP DI,BXJAE L_DOWN ;未到达顶点,继续上升MOV AX,0 JMP L_DOWN ;到达顶点,准备下降EXIT: POP AX ;堆栈保存的原来显示方式出桟MOV AX,2INT 10H ;恢复原来的显示方式MOV AH,4CHINT 21HCODE ENDS;定义子程序的段PCODE SEGMENT ;画像素点(DX,CX): 像素点(DX,CX)反色显示 WritePixel PROC FARPUSH BXPUSH AXMOV BL,0 ; 0 页MOV AH,0DH INT 21HXOR AL,0FFHMOV BL,0MOV AH,0CHINT 10HPOP AXPOP BXRET WritePixel ENDP ;HorLine: 画行为 DX,列从 S 到 DI 的水平线 HorLine PROC FARPUSH CXPUSH SIPUSH DICMP SI,DIJBE OK_LRXCHG SI,DIOK_LR: MOV CX,SILOP_DRAW:CALL WritePixel INC CXCMP CX,DIJBE LOP_DRAWPOP DIPOP SIPOP CXRET HorLine ENDP; 画圆周八上个对称点WrCircle PROC FARPUSH AXPUSH BXPUSH CXPUSH USH SIPUSH DIMOV CX,SIADD CX,AXMOV DX,DIADD DX,BXCALL WritePixelMOV CX,SISUB CX,AXMOV DX,DIADD DX,BXCALL WritePixelMOV CX,SIADD CX,AXMOV DX,DISUB DX,BXCALL WritePixel MOV CX,SISUB CX,AXMOV DX,DISUB DX,BXCALL WritePixel MOV CX,SIADD CX,BXMOV DX,DIADD DX,AXCALL WritePixelMOV CX,SISUB CX,BXMOV DX,DIADD DX,AXCALL WritePixel MOV CX,SIADD CX,BXMOV DX,DISUB DX,AXCALL WritePixelMOV CX,SISUB CX,BXMOV DX,DISUB DX,AXCALL WritePixel POP DIPOP SIPOP OP CXPOP BXPOP AXRETWrCircle ENDP;以点(SI,DI)为圆心画半径为 CX 的圆周曲线Circle PROC FARPUSH AXPUSH BXPUSH DXMOV AX,0MOV BX,CX ;CX 为半径MOV DX,1SUB DX,CXCALL WrCircleAGAIN:CMP AX,BXJAE CircleOKINC AXCMP DX,0JGE OTHERPUSH AXSHL AX,1ADD AX,3ADD DX,AXPOP AXJMP WritePoints OTHER: PUSH AXSUB AX,BXSHL AX,1ADD AX,5ADD DX,AXPOP AXDEC BXWritePoints: CALL WrCircleJMP AGAINCircleOK:POP OP BXPOP AXRET Circle ENDP;延时程序,可修改子程序中的参数 20,60000 以改变延时时间Delay PROC FARPUSH CXPUSH USH BXMOV BX,20L0: MOV CX,60000L1: MOV DX,CX L2: DEC DXJNA L2LOOP L1DEC BXJNZ L0POP BXPOP OP CXRETDelay ENDPPCODE ENDSEND START
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号