资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,微机原理研讨,第二组:王格林 孙玲瑶 李浩宇,王宏宇 于亚鲲 李鹏 张记瑞 马朝阳,陈禹硕 陆林 刘安蒙 李博智,汇编语言制作简易动画之小鸟飞过,题目设想,利用汇编语言实现简易动画的途径有许多种,我们组则选择了利用,Bios,的调用中的显示功能来做。小鸟图形的设计方法也有很多种,可以利用打点作图,也可以以字符画的形式。由于,bios,有些功能模式在,win7,系统下不兼容,还因时间的限制,本组选择了用字符画模拟小鸟的形状,利用,bios,的,00,号功能的字符显示方式。我们最终的结果是让字符小鸟在屏幕上飞出一个,V,字形。,源代码选段,DATA SEGMENT,INFO1 DB 0DH,0AH,INPUT 1OR2:(1:bird,2:exit)$,BIRD DB 2DH,10,3EH,10,4FH,10,2EH,10,DB 2DH,10,3DH,10,4FH,10,2EH,10 ;,小鸟的字符图形表,DB 1000 DUP(?),DATA ENDS,STACK SEGMENT stack,DB 200 DUP(0),STACK ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,SS:STACK,源代码选段,START:MOV AX,DATA,MOV DS,AX,MOV AH,0 ;,设置显示方式为黑白字符显示方式,MOV AL,0,INT 10H,LEA DX,INFO1 ;,在显示器上显示字符串提示信息,MOV AH,9,INT 21H,MOV AH,0 ;,从键盘读取字符到,AL,寄存器,INT 16H,CMP AL,31H ;,比较,AL,是否等于,1,JNE A,CALL XIAO,A:CMP AL,32H ;,比较,AL,是否等于,2,JNE START,MOV AH,4CH ;,终止当前程序并返回调用程序,INT 21H,源代码选段,xiao proc ;,小鸟子程序,PUSH DS,MOV AX,0,PUSH AX,MOV AX,DATA,MOV DS,AX,MOV AH,0 ;,设置显示方式为黑白字符显示方式,MOV AL,0,INT 10H,MOV AH,0FH ;,读当前显示状态,INT 10H,MOV DH,0,MOV DL,0,源代码选段,BEGIN:MOV SI,2,MOV CX,1 ;,光标位置显示图形的次数,LEA DI,BIRD ;DI,指向小鸟字符表首字母,DISP:CMP DL,20,JAE disp1,MOV BP,DX,MOV AH,2 ;,设置光标位置,INT 10H,MOV AH,9 ;,显示小鸟字符图形,MOV AL,DI,MOV BL,DI+1,INT 10H,MOV DX,BP,CALL DLY ;,延时,MOV AH,2 ;,设置光标位置,INT 10H,MOV AH,9 ;,显示空字符图形,MOV AL,MOV DX,BP,INC DL,inc dh,ADD DI,8,DEC SI,JNZ DISP,JMP BEGIN,源代码选段,disp1:CMP DL,40,JAE exit1,MOV BP,DX,MOV AH,2 ;,设置光标位置,INT 10H,MOV AH,9 ;,显示小鸟,-,字符图形,MOV AL,DI,MOV BL,DI+1,INT 10H,MOV DX,BP,CALL DLY ;,延时,MOV AH,2 ;,设置光标位置,INT 10H,MOV AH,9 ;,显示空字符图形,MOV AL,MOV DX,BP,INC DL,DEC dh,ADD DI,8,DEC SI,JNZ DISP1,JMP BEGIN,EXIT1:RET,XIAO ENDP,源代码选段,DLY PROC NEAR ;,延时子程序,PUSH CX,PUSH DX,MOV DX,150,DL1:MOV CX,6801,DL2:LOOP DL2,DEC DX,JNZ DL1,POP DX,POP CX,RET,DLY ENDP,CODE ENDS,END START,让小鸟飞一会儿,Bios,功能调用在书上有提到过,但是由于不是很详细,所以在应用时我们也出现了许多问题。下面给大家讲一讲我们组在编程时出现的几个典型问题。,问题一之 匹诺曹鸟,在,bios,中,,cx,寄存器控制的是显示次数,我们查表时没有注意到这一点,把,cx,寄存器用到了一个循环中去,于是出现了字符小鸟 “,-O.,”中后面那个“,.,”随着行数的增加不断增加,看起来像小鸟的鼻子不断变长一样。,我们研究了很久都没有发现程序中的错误,最终才发现是由于查表不仔细而引发的杯具。,问题二之愤怒的小鸟,在我们的调试过程中,我们的预想是让字符小鸟飞出一个,V,字形,于是我们设定由第,0,行,0,列向下斜飞到第,15,行,15,列然后在向上斜飞。分别用两个循环控制。第一个循环中行是递加的列也是递加的,第二个循环中行是递减的但列还应是递加的,我们误将第二个循环中的列设成了递减,于是当鸟飞到第,15,行,15,列时,会从新回到,14,行,14,列位置,在这几个位置上下移动进入死循环。,问题三之影分身鸟,调试时,我们还遇到了这样一个问题,屏幕上每增加一行就出现一只小鸟,但原来那行的小鸟没有消失,于是循环结束后屏幕上就出现了,N,只鸟。这个错误的主要由于没有将原来那行的小鸟擦除掉而导致的。于是我们选择了暂存小鸟坐标,在上一个小鸟的位置输入空字符覆盖掉原来的字符。由此来起到擦除作用。,心得体会,本次课程设计让我们学到了许多平时没有多注意的知识,也锻炼了实践能力。通过这次课程设计我们学到了做程序时要有耐心,不可浮躁,多加调试。还有做程序时要有创新,即使有些地方借鉴了别人,也要加以理解融会贯通,然后以自己的理解去做,并在原有的基础上有所改良。,谢谢!,
展开阅读全文