汇编语言动画程序的设计报告

上传人:文**** 文档编号:59711130 上传时间:2022-03-04 格式:DOC 页数:23 大小:157KB
收藏 版权申诉 举报 下载
汇编语言动画程序的设计报告_第1页
第1页 / 共23页
汇编语言动画程序的设计报告_第2页
第2页 / 共23页
汇编语言动画程序的设计报告_第3页
第3页 / 共23页
资源描述:

《汇编语言动画程序的设计报告》由会员分享,可在线阅读,更多相关《汇编语言动画程序的设计报告(23页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上一、游戏背景介绍随着信息时代的发展,计算机已经变为我们生活中不可缺少的一部分,它作为我们了解世界的一个窗口的同时还可以让我们从中以最快的速度查找学习资源,休闲之余,更多的人选择玩小型的益智游戏来放松,因为它不仅达到了娱乐的目的,而且对自己的思维有一定的帮助作用,根据大多数人的娱乐放松需求,我做出了一款动画游戏可控的汽车与机器 人。上了一学期的汇编语言课,让我对汇编语言有了一定的认识。这次课程作业我决定亲自动手用汇编语言编写一个型小程序,熟悉计算机体系结构,加深对汇编语言的了解。DOS操作系统的功能调用及BIOS的功能调用。进一步了解汇编语言控制计算机硬件的方法,以及如

2、何用汇编语言来实现算法, 提高应用汇编语言编程的能力,也加深了自己对一些算法的理解,提高了自己的编程能力。利用汇编语言编写程序,在屏幕上显示动画,还可以通过键盘上的输入来改变图片的位置,实现动画的运动。动画游戏程序设计的开始屏幕上会出现一辆小车和一个机器人,操作者可自由选择至少两个运动物体(机器人和汽车)在屏幕上运动,一开始汽车与人分别从左向右、从右向左运动,操作者可以通过屏幕上方现实的提示对机器人和小车进行控制。可以通过键盘上的W、A、S、D和上下左右的方向键来分别控制运动机器人和小车通过W,A,S,D控制方向,同时整个程序包括人机界面控制台和运动中动画的暂停(空格键控制),开始(ENTER

3、键控制),退出键则由ESC键控制,运动加减速动作(“+”控制逐级加速、“”控制逐级减速)。程序插图如图1:图1动画界面示意图屏幕上方是操作提示,用户可与根据提示对汽车和小人进行操控,来改变他俩的运动轨迹。起先车和小人都是各自运动的一个向左另一个向右,操作者可以通过键盘来改变这两物体的运动轨迹,同时在按键盘上的加号会看见物体的运动速率明显加快,减号则反之。二、核心算法思想本程序定义了两个图分别表示(汽车和机器人),八个坐标变量(汽车清图坐标car_row0 car_col0 汽车画图坐标car_row1 car_col1机器人清图坐标man_row0 man_col0机器人画图坐标man_row

4、1 man_col1),用于控制汽车和机器人清图和画图的坐标。首先在屏幕上显示两个物体,让他们按照从左到右和从右到左方式分别运动。他们的运动是通过不断的修改图片的坐标,并清屏,然后根据新的坐标重新绘制画面来实现的。通过一大个循环对上面个两个坐标进行改变,每次横坐标加上一个固定的值,或减去一个固定的值。再通过清图然后重绘实现物体的移动。为人实现物体能根据操作者的要求上下左右运动,程序实现设定好了几个可以上下左右操控图片位置的键。每当操作者按下这几个键,系统自动的,将图片位置的横纵坐标进行加上或减去某个固定的值,加的多少还取决于操作者按键次数得多少。确定图片的位置是通过检测用户的输入和外层大循环不

5、断自加某个数,综合来改变下次重绘的坐标来实现的。总之要想物体动起来就是通过不断地清屏来清除上次图片的位置,然后获取图片坐标,这个坐标是不断地被用户和系统修改的,并重回新的图片画面,于是用户可以看见物体在屏幕上不断的移动。以下是让运动起来运动的逻辑图:画图(row1,col1)开始row1加1col1 加1 清图(row0,col0)判断是否有按键输入row1赋给row0col1赋给col0修改row1、col1否是图2动画运动算法示意图 首先是清理屏幕上的物体将屏幕刷成黑色,然后获得机器人和小车新的位置坐标,根据这根位置坐标绘制出小车的位置。从而实现小车的运动。同时通过操控设定好的上下左右键可

6、以修改坐标,形同会自动根据你按键的次数以及方向键物体的横纵坐标加上或减去一个先前设定好的固定值。从而实现了,操作者对物体运动东方向的控制。三、核心算法流程图主程序:程序开始,设置显示方式为80X25 16色图形方式和提示信息如下:(SPACE-PAUSE,ENTER-BEGAIN,ESC-EXIT,SPEEDUP-+,SLOWDOWN- -) (CAR:UP-W,DOWN-S,LEFT-A,RIGHT-D MAN:UP-8,DOWN-2,LEFT-4,RIGHT-6) 调用car_disp和man_disp子程序设置开始图形,起始坐标在数据定义时已给出,然后调用绘图子程序控制汽车和机器人的运动

7、,空格暂停,回车开始,ESC退出,实现动画的主程序算法图如图3。否是是否否判断是否是ENTER判断是否是空格判断输入是否为ESC开始启用绘图程序图片初始化屏幕上显示提示信息结束是暂停图3主程序算法示意图程序运行后除了绘制移动的人和车外,还要看是否有暂停,开始,和退出的操作。根据输入对程序运行进行调整。MOVE子程序:MOVE子程序是整个程序的核心,通过键盘操作控制汽车和机器人的运动,首先检测键盘,若无键盘操作,运行主程序。控制物体移动算法图如图4:NYYYNNYYYNNYYYNNYYNNN6?-?+?4?2?8?D?S?开始W?键盘检测合法字符?A?结束主程序机器人下移动一个单位机器人左移动一

8、个单位机器人上移动一个单位汽车向右移动一个单位汽车向下移动一个单位汽车向左移动一个单位加速机器人右移动一个单位减速汽车向上移动一个单位物体移动图4操控物体算法示意图加号和减号分别控制加速和减速,原本主程序会每隔一段时间自动把汽车横坐标加一,人的横坐标减一重复操作,若有键盘响应,则实现自动运动,则通过比较键盘扫描码来确定执行何种操作, “+”按一次速度加快一级,“”按一次速度减慢一级,WASD控制汽车的上左下右移动,方向键和8、6、2、4都能控制机器人的运动方向,DISP绘图程序:DISP输出图形子程序该程序的主要功能是根据定义的图形表画出图形,过程如下:N结束主程序cx=0?si+4 cx-1

9、字符行列坐标存入dh,dl初始化cx开始si指向图形表的第一个字符显示当前si指向的字符Y图5根据自定义图形绘图算法示意图首先获得存放自定义图形字符串数组,进行初始化,再根据坐标获得物体的酒气体坐标然后绘制物体。汽车和机器人画图子程序:当汽车和小人运动到边界时就会消失,于是我另外写了两个子程序让运动到边界的物体自此回到界面,这里我让从左边出去的物体从右边出现,从右边出去的的物体从左边出现,这样就像地球是圆的一样,当让当你控制物体从上方或者下方出去时,也会出现在相反反向。car_disp,man_disp子程序分别用于用于处理汽车和小人运动到屏幕边界的情况,显示图形以及设置坐标。以汽车为例:si

10、指向汽车图形表的第一个字符,当行数(car_row1)大于20,跳到第4行,行数(car_row1)小于4,跳到第20行列数(car_col1)小于3,跳到第70列,列数car_col1)大于70,跳到第3列,实现边界设置,再将row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标,然后把car_row1赋给dh,car_col1赋给dl,然后在调用DISP画出汽车图形,这样汽车就会从另一个方向冒出来。总之,这里也是通过修改物体的左边来实现这样的效果的。清图子程序: 这部分程序主要负责清理上一次绘图留下来的画面为下一步的重绘做准备,实现物体的移动效果,否则会出现物体

11、在上次基础上重绘,变成物体推着尾巴。影响动画效果。这部分的代码样式为:car_clearproc near ;汽车清图子程序 clear_car car_row0,car_col0 ;调用汽车清图宏ret ;返回car_clearendp该程序的主要功能就是调用宏来清图。因为子程序不能传递参数,所以选择用宏定义来实现参数(坐标)的传递,但是宏展开使得代码很长,而且该子程序调用频繁,以致超过条件转移的范围,系统报错,用子程序就可以解决。延时子程序DLY: 主要功能使控制延时,通过这个子程序就那个能够控制物体运动的速度。延时的时间越长,物体运动的速度就越慢,相反延时时间越短,就相当于物体运动的频率

12、加快这样物体运动就加快了。我采用的是控制延时时间的的长短,从而实现加速和减速。通过宏定义来实现参数(dlay1)的传递,用“+”“”来改变dlay1的值,控制延时,因为我给时间设定了几个值于是当用户按加号是就不断自加加到最大之时再自加就变成最小值,减号则反之,所以会看到很快的物体瞬间变慢。四、源代码整个程序实现的源代码如下:datasegment ;定义数据段CAR0 DB 7 ;汽车的字符图形表DB 0DBH,1,0,0DB 0DBH,1,0,1DB 0DBH,7,0,1DB 0DBH,7,0,1DB 4FH,6,1,0DB 4FH,6,0,-3DB 2,6,-2,1;-MANU DB 11

13、 ;机器人的图形表 DB 0DBH,09H,0,0 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 02H,09H,-1,-2 DB 03H,0CH,2,0 DB 0DBH,09H,1,-1 DB 0DBH,09H,0,2 DB 0DBH,09H,1,-3DB 0DBH,09H,0,4;-画图与清图坐标-car_row0 db 10 ;汽车清图坐标car_col0 db 10car_row1 db 10 ;汽车画图坐标car_col1 db 10man_row0 db 15 ;机器人清图坐标man_col0

14、db 60man_row1 db 15 ;机器人画图坐标man_col1 db 60;延时时间间隔dlay1 dw 10000 ;控制延时变量,即控制速度的变量;-输出提示-INFO1 DB 0DH,0AH, (SPACE-PAUSE,ENTER-BEGAIN,ESC-EXIT,SPEEDUP- +,SLOWDOWN- - )$ ;动画控制提示信息,空格暂停,回车开始,ESC退出,; “+”按一次速度加快一级,“”按一次速度减慢一级INFO2 DB 0DH,0AH, (CAR:UP-W,DOWN-S,LEFT-A,RIGHT-D MAN:UP-8,DOWN-2,LEFT-4,RIGHT-6)$

15、 ;动画控制提示信息,WASD控制汽车的上左下右移动,方向键控制机器人的运动方向;-汽车宏定义-clear_car macro row,col ;宏定义汽车清图push bxmov ax,0600Hmov ch,rowdec ch,1mov cl,colmov dh,chmov dl,cladd dh,3;坐标加3add dl,4;坐标加4mov bh,7int 10hpop bxendm;- 宏定义机器人-clear_man macro row,col ;宏定义机器人清图push bxmov ax,0600H mov ch,row dec ch,1mov cl,coldec cl,0mov

16、dh,chmov dl,cladd dh,5;坐标加5add dl,5;坐标加5 mov bh,7 int 10Hpop bx endm;-;主要功能使控制延时,我采用的是控制空制令执行的条数来;控制延时的长短,从而实现加速和减速。通过宏定义来实现;参数(dlay1)的传递,用“+”“”来改变dlay1的值,控制延时。;- 延时程序-d macrodlay1 ;宏定义延时程序 push cx push dx mov dx,dlay1dl1: mov cx,6801dl2: loop dl2 dec dx jnz dl1 pop dx pop cx endm;-codesegment ;定义代码

17、段mainproc far ;主函数 assume cs:code,ds:datastart: push dsmov ax,0push axmov ax,datamov ds,ax mov al,3 ;设置显示方式为80*25 16色图形方式 mov ah,0 int 10H lea dx,info1 ;在显示器上显示字符串提示信息 mov ah,9 int 21h lea dx,info2 ;在显示器上显示字符串提示信息 mov ah,9 int 21hcall car_disp ;初始汽车的位置call man_disp ;初始机器人的位置call MOVEretmain endp;-di

18、sp proc near ;输出图形子程序 push ax push bx push cx push dx push si sub ch,ch mov cl,si inc si next: add dh,si+2 ;改变行列坐标 add dl,si+3mov ah,2 ;置光标位置DH为行、DL为列 int 10hmov al,si ;取字符值mov bl,si+1 ;取字符属性 push cxmov cx,1 mov AH,9 ;显示字符int 10Hpop cxadd si,4 ;SI指向下一个字符loop nextpop sipop dxpop cxpop bxpop axretdisp

19、 endp;-car_dispproc near ;汽车画图子程序push silea si,CAR0 ;取汽车的图cmp car_row1,20 ;设置汽车运动的边界ja c0 ;行数大于20,跳到第4行cmp car_row1,4 ;行数小于4,跳到第20行jb c1cmp car_col1,3 ;列数小于3,跳到第70列jb c2cmp car_col1,70 ;列数大于70,跳到第3列ja c3jmp cnc0:mov car_row1,4jmp cnc1:mov car_row1,20jmp cnc2:mov car_col1,70jmp cnc3:mov car_col0,3mov

20、 car_col1,3jmp cncn: mov bh,0 ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标 mov bl,car_row1 mov car_row0,bl mov bl,car_col1 mov car_col0,bl mov dh,car_row1 mov dl,car_col1 call disp ;调用DISP画出汽车图形 pop siretcar_dispendp;-car_clearproc near ;汽车清图子程序clear_car car_row0,car_col0 ;调用汽车清图宏ret ;返回car_clearendp;

21、-man_dispproc near ;机器人画图子程序push silea si,MANU ;取机器人的图 cmp man_row1,20 ;设置机器人运动的边界 ja n0 ;行数大于20,跳到第4行 cmp man_row1,4 ;行数小于4,跳到第20行 jb n1 cmp man_col1,3 ;列数小于3,跳到第70列 jb n2 cmp man_col1,70 ;列数大于70,跳到第3列 ja n3 jmp nnn0:mov man_row1,4jmp nnn1:mov man_row1,20jmp nnn2:mov man_col1,70jmp nnn3:mov man_col

22、0,3mov man_col1,3jmp nnnn:push bx ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标mov bh,0mov bl,man_row1mov man_row0,blmov bl,man_col1mov man_col0,blpop bxmov dh,man_row1mov dl,man_col1call disp ;调用DISP画出机器人图形pop siretman_dispendp;-man_clearproc near ;机器人清图子程序clear_man man_row0,man_col0 ;调用机器人清图宏ret ;返回m

23、an_clearendp;-moveprocnear ;控制汽车和机器人的运动push axpush bx;- 取键盘操作-next1:mov ah,01H ;取键盘缓冲区状态int 16hjnz next2 ;缓冲区无按键,等待DLY dlay1 call car_clear ;汽车一直向右运动inc car_col1 call car_dispcall man_clear ;机器人一直向左运动dec man_col1call man_dispjmp next1next2:mov ah,0 ;从键盘读字符int 16h;-DISP proc near ;输出图形子程序 push ax pus

24、h bx push cx push dx push si sub ch,ch mov cl,si inc si next: add dh,si+2 ;改变行列坐标 add dl,si+3mov ah,2 ;置光标位置DH为行、DL为列 int 10hmov al,si ;取字符值mov bl,si+1 ;取字符属性 push cxmov cx,1 mov AH,9 ;显示字符int 10Hpop cxadd si,4 ;SI指向下一个字符loop nextpop sipop dxpop cxpop bxpop axretdisp endp;-根据键盘输入判断选择-up: ;W 汽车向上运动cm

25、p ah,11hjnz downcall car_cleardec car_row1call car_dispjmp next1down: ;S 汽车向下运动cmp ah,1Fhjnz leftcall car_clearinc car_row1call car_dispjmp next1left: ;A 汽车向左运动cmp ah,1Ehjnz rightcall car_cleardec car_col1call car_dispjmp next1right: ;D 汽车向右运动cmp ah,20hjnz up1call car_clearinc car_col1call car_dispj

26、mp next1up1: ;机器人向上运动cmp ah,48hjnz down1call man_cleardec man_row1call man_dispjmp next1down1: ;机器人向下运动cmp ah,50hjnz left1call man_clearinc man_row1call man_dispjmp next1left1: ;机器人向左运动cmp ah,4bhjnz right1call man_cleardec man_col1call man_dispjmp next1right1: ;机器人向右运动cmp ah,4dhjnz speedup1call man_

27、clearinc man_col1call man_dispjmp next1speedup1:;主键盘加号cmp ah,0dh ;+加速运动jnz speedup2sub dlay1,1000jmp next1speedup2:; ;小键盘加号cmp ah,4Eh ;+(小键盘)加速运动jnz speeddown1sub dlay1,1000jmp next1speeddown1:;主键盘减号cmp ah,0ch ;-减速运动jnz speeddown2add dlay1,1000jmp next1speeddown2:;小键盘减号cmp ah,4Ah ;-减速运动jnz space1add

28、 dlay1,1000jmp next1space1:cmp ah,39h ;SPACE暂停运动jnz exit1space:mov ah,0 ;从键盘读字符,AL=字符码,AH=扫描码int 16hcmp ah,1ch ;回车返回next1,否则继续等待从键盘读字符,实现暂停jnz spacejmp next1exit1:cmp ah,01h ;ESC退出jnz otherspop bxpop ax ret ;返回主程序others: ;按其他键,无效,继续运行jmp next1MOVE ENDP;-code ends end start 五、心得体会 选题的时候我以为动画程序的实现应该使非

29、常容易实现的,就是不停的清屏,重新在下一个位置画图,从而实现动画。但通过本次汇编作业,我才真正懂得了动画的实现其实没有我想象的那么简单。刚开始我做了一个图形,继而由一个图形做成两个,在这个过程中我碰到了很多难题,比如如何画图,如何实现图形的运动,如何在一个屏幕上显示两个图形,如何分别控制两个图形的运动,为了解决这些问题我试了很多方法,最后我选择了坐标控制运动,局部清屏,我觉得这是我能想到的最好的方法了,虽然做的过程很累,整天都在想问题的解决方法,但当你解决一个问题之后,那种感觉真的很享受,当整个程序完成的时候我很兴奋。当然这个程序还有一些不足的地方,比如说当俩物体运动到一起时没有碰撞效果,还有

30、就是程序的界面不够友好。通过这次作业,也让我熟悉了很多以前都不熟悉的一些指令,并利用这些指令去实现一些操作。同时也让我更加了解了汇编程序的结构和流程,对编程也有了更深的体会。过程中我还学会了一些处理问题的方法:理论与实践相结合,不懂的地方应勤问老师勤问同学,直到把它搞懂为止。源代码:(修正后)datasegment ;定义数据段CAR0 DB 7 ;汽车的字符图形表 DB 0DBH,1,0,0 DB 0DBH,1,0,1 DB 0DBH,7,0,1 DB 0DBH,7,0,1 DB 4FH,6,1,0 DB 4FH,6,0,-3DB 2,6,-2,1MANU DB 11 ;机器人的图形表 DB

31、 0DBH,09H,0,0 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 0DBH,09H,0,1 DB 02H,09H,-1,-2 DB 03H,0CH,2,0 DB 0DBH,09H,1,-1 DB 0DBH,09H,0,2 DB 0DBH,09H,1,-3 DB 0DBH,09H,0,4car_row0 db 10 ;汽车清图坐标car_col0 db 10car_row1 db 10 ;汽车画图坐标car_col1 db 10man_row0 db 15 ;机器人清图坐标man_col0 db 60man_row1 db 15 ;

32、机器人画图坐标man_col1 db 60dlay1 dw 10000 ;控制延时变量,即控制速度的变量INFO1 DB 0DH,0AH, (SPACE-PAUSE,ENTER-BEGAIN,ESC-EXIT,SPEEDUP- +,SLOWDOWN- - )$ ;动画控制提示信息,空格暂停,回车开始,ESC退出,“+”按一次速度加快一级,“”按一次速度减慢一级INFO2 DB 0DH,0AH, (CAR:UP-W,DOWN-S,LEFT-A,RIGHT-D MAN:UP-8,DOWN-2,LEFT-4,RIGHT-6)$ ;动画控制提示信息,WASD控制汽车的上左下右移动,方向键控制机器人的运

33、动方向;-clear_car macro row,col ;宏定义汽车清图push bxMOV AX,0600H MOV Ch,rowdec ch,1mov cl,colmov dh,chmov dl,cladd dh,3add dl,4 MOV BH,7 INT 10Hpop bxendm;-clear_man macro row,col ;宏定义机器人清图push bxMOV AX,0600H MOV Ch,row dec ch,1mov cl,coldec cl,0mov dh,chmov dl,cladd dh,5add dl,5 MOV BH,7 INT 10Hpop bx endm

34、;-DLY macrodlay1 ;宏定义延时程序 PUSH CX PUSH DX MOV DX,dlay1DL1: MOV CX,6801DL2: LOOP DL2 DEC DX JNZ DL1 POP DX POP CX endm;-codesegment ;定义代码段mainproc far ;主函数 assume cs:code,ds:datastart: push dsmov ax,0push axmov ax,datamov ds,ax mov al,3 ;设置显示方式为80*25 16色图形方式 mov ah,0 int 10H lea dx,info1 ;在显示器上显示字符串提

35、示信息 mov ah,9 int 21h lea dx,info2 ;在显示器上显示字符串提示信息 mov ah,9 int 21hcall car_disp ;初始汽车的位置call man_disp ;初始机器人的位置call MOVEretmain endp;-DISP PROC NEAR ;输出图形子程序 PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI SUB CH,CH MOV CL,SI INC SI NEXT: ADD DH,SI+2 ;改变行列坐标 ADD DL,SI+3 MOV AH,2 ;置光标位置DH为行、DL为列 INT 10H MOV

36、AL,SI ;取字符值 MOV BL,SI+1 ;取字符属性 PUSH CX MOV CX,1 MOV AH,9 ;显示字符 INT 10H POP CX ADD SI,4 ;SI指向下一个字符 LOOP NEXT POP SI POP DX POP CX POP BX POP AX RETDISP ENDP;-car_dispproc near ;汽车画图子程序push si lea si,CAR0 ;取汽车的图cmp car_row1,20 ;设置汽车运动的边界ja c0 ;行数大于20,跳到第4行cmp car_row1,4 ;行数小于4,跳到第20行jb c1cmp car_col1,

37、3 ;列数小于3,跳到第70列jb c2cmp car_col1,70 ;列数大于70,跳到第3列ja c3jmp cnc0:mov car_row1,4jmp cnc1:mov car_row1,20jmp cnc2:mov car_col1,70jmp cnc3:mov car_col0,3mov car_col1,3jmp cncn: mov bh,0 ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标mov bl,car_row1mov car_row0,blmov bl,car_col1mov car_col0,blmov dh,car_row1mo

38、v dl,car_col1 CALL DISP ;调用DISP画出汽车图形pop siretcar_dispendp;-car_clearproc near ;汽车清图子程序 clear_car car_row0,car_col0 ;调用汽车清图宏ret ;返回car_clearendp;-man_dispproc near ;机器人画图子程序push si lea si,MANU ;取机器人的图cmp man_row1,20 ;设置机器人运动的边界ja n0 ;行数大于20,跳到第4行cmp man_row1,4 ;行数小于4,跳到第20行jb n1cmp man_col1,3 ;列数小于3

39、,跳到第70列jb n2cmp man_col1,70 ;列数大于70,跳到第3列ja n3jmp nnn0:mov man_row1,4jmp nnn1:mov man_row1,20jmp nnn2:mov man_col1,70jmp nnn3:mov man_col0,3mov man_col1,3jmp nnnn:push bx ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标mov bh,0mov bl,man_row1mov man_row0,blmov bl,man_col1mov man_col0,blpop bxmov dh,man_ro

40、w1mov dl,man_col1 CALL DISP ;调用DISP画出机器人图形pop siretman_dispendp;-man_clearproc near ;机器人清图子程序 clear_man man_row0,man_col0 ;调用机器人清图宏ret ;返回man_clearendp;-MOVEprocnear ;控制汽车和机器人的运动push axpush bxnext1:mov ah,01H ;取键盘缓冲区状态int 16hjnz next2 ;缓冲区无按键,等待 DLY dlay1 call car_clear ;汽车一直向右运动inc car_col1 call ca

41、r_dispcall man_clear ;机器人一直向左运动dec man_col1call man_disp jmp next1next2: mov ah,0 ;从键盘读字符 int 16h;判断选择-up: ;W 汽车向上运动cmp ah,11hjnz downcall car_cleardec car_row1call car_disp jmp next1down: ;S 汽车向下运动cmp ah,1Fhjnz leftcall car_clearinc car_row1call car_disp jmp next1left: ;A 汽车向左运动cmp ah,1Ehjnz rightc

42、all car_cleardec car_col1call car_disp jmp next1right: ;D 汽车向右运动cmp ah,20hjnz up1call car_clearinc car_col1call car_disp jmp next1up1: ;机器人向上运动cmp ah,48hjnz down1call man_cleardec man_row1call man_disp jmp next1down1: ;机器人向下运动cmp ah,50hjnz left1call man_clearinc man_row1call man_disp jmp next1left1:

43、 ;机器人向左运动cmp ah,4bhjnz right1call man_cleardec man_col1call man_disp jmp next1right1: ;机器人向右运动cmp ah,4dhjnz speedup1call man_clearinc man_col1call man_disp jmp next1speedup1:cmp ah,0dh ;+加速运动jnz speedup2sub dlay1,1000jmp next1speedup2:cmp ah,4Eh ;+(小键盘)加速运动jnz speeddown1sub dlay1,1000jmp next1speeddown1:cmp ah,0ch ;-减速运动jnz speeddown2add dlay1,1000jmp next1speeddown2:cmp ah,4Ah ;-(小键盘)减速运动jnz space1add dlay1,1000jmp next1space1:cmp ah,39h ;SPACE暂停运动jnz exit1 space:mov ah,0 ;从键盘读字符,AL=字符码,AH=扫描码int 16h

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!