预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

汇编语言程序设计期末大作业 仔细阅读课本第十章有关写显示缓存的方法以及INT10H功能调用说明。参考附件给出的图形显示方法,完成期末作业。以下题目从易到难,期末分值与难度大小成正比。可任选一题,完成后提交纸质报告,报告内容包含题目、算法流程、模块功能说明、源代码(含详细注释)、实验结果截图、总结。作业由班长、学习委员收齐后于日期为2013年6月24日交(具体时间到时候联系)。 题1.游戏程序常常用随机数来控制其图形在屏幕上移动。请编写一程序,用随机数来控制笑脸符(ASCII码02H)显示的位置。笑脸符每次显示的列号总是递增1。而行的位置可能是前次的上一行,下一行或同一行,这根据随机数是0、1或2来决定,当行号变为0、24或列号变为79时显示结束。笑脸在每个位置上显示若干毫秒(具体时间自行设计)。(提示:INT1AH的AH=0是读当前时间的功能调用,利用该功能返回的随时都在变化的时间值作为产生随机数的基数。见课本第十章练习); 题2.参考附件实例,显示一如下形状的拖拉机从左向右行驶; 题3.参考附件实例,将一小球(圆)沿着如半径为300像素的上半圆周移动(如同); 题4.参考附件实例,将一小球沿着抛物线形式起降,运行路线如下图所示(建议选用抛物线方程y-y0=a*(x-x0)(x-x0),每次顶点高度是上次高度的80%); 题5.参考附件实例,将实例中的空心圆编程实心圆显示完成题2-题4中一个。难度级在相应题目上提高半级。 附件说明: 通过INT10H的不同的功能号(AH)的选择可实现获取当前显示器工作方式、设置显示器显示方式。 在图形工作方式下调用INT10H可以实现用颜色写像素。查看附件代码中的WritePixel子程序。 画水平线段和画圆周曲线查看子程序HorLine和Circle,以上题目中可能需要自行添加画垂直直线段的子程序。 注意画线、画圆周子程序都使用了写点子程序WritePixel,而写点子程序对点先去原来颜色,颜色字节的每个二进制位求反来显示该像素,这样做的好处是要擦除画的点、线时,只要再反色写点或画线就可以了。 花大概3-4天时间仔细阅读附件实例,后只要1-2天的时间修改实例就可以做完上面任意一个题目。 附件: ;ThisexamplecanintroduceyoutofinishtheAssemblyexcisequickly. ;ChenggenYang,NanChangUniversity,2013.06.12 STACKSEGMENTSTACK DW100HDUP(?) TOSEQU$ STACKENDS ;主程序段 CODESEGMENT ASSUMECS:CODE START: MOVAX,STACK MOVSS,AX MOVSP,TOS;设置堆栈栈顶 MOVAH,0FH INT21H PUSHAX;获取当前的显示方式,并将它保护到堆栈里 MOVAX,12H INT10H;将屏幕显示方式设置为VGA(640*480)彩色方式 MOVDX,400 MOVSI,0 MOVDI,639 CALLHorLine;在第402行画直线 MOVCX,9;CX存放圆周半径 MOVSI,CX MOVDI,400 SUBDI,CX;SI和DI分别存放圆心横坐标和纵坐标 ;下面代码显示从左到右滚动的圆周 DrawAgain: CALLCircle;画圆周 CALLDelay;延时 CALLCircle;擦除圆周 CALLDelay;延时 INCSI CMPSI,640 JNZDrawAgain;圆心从左到右循环画圆和擦除圆 ;下面代码显示落下和回弹的小球(圆周) MOVBX,CX;CX存放圆周半径 NEGBX ADDBX,400 MOVDX,BX;DX存放小球落地是圆心纵坐标 MOVBX,CX;BX存放小球弹起到顶点的纵坐标 MOVAX,0;AX存放小球是落下(0)还是上升(1)的状态 MOVSI,320;SI存放小球落下和弹起所在的横坐标。 MOVDI,CX;对DI加1或减1来实现小球下落和上升。(SI,DI)为圆心。 L_DOWN: CALLCircle CALLDelay CALLCircle CALLDelay TESTAX,1 JNZL_UP;转向圆上升 INCDI CMPDI,DX JBEL_DOWN;未到达底部继续下降 PUSHAX PUSHDX PUSHCX MOVAX,DX SUBAX,BX SHLAX,1 SHLAX,1 XORDX,DX MOVBX,5 DIVBX MOVBX,AX;到达底部计算下一次上升高度 POPCX POPDX POPAX CMPBX,0;下次上升高度是0,则结束 JZEXIT NEGBX ADDBX,DX;上升顶点