《2022年2022年汇编动画小汽车程序设计 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编动画小汽车程序设计 .pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言程序设计综合程序设计实验报告题目:动画小汽车名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 一、项目简介由汇编语言编写程序,进入DOS 界面或 BIOS 界面,汇编语言程序结构有loop 循环,子程序调用数据定义等。有三个界面,主界面,帮助help 界面和游戏界面(小车动画)在界面上显示小车图形,并有相应的操作界面的说明。有玩家通过键盘操作,实现小车的基本功能,小车可以上,下,左,右,或一直匀速移动。二、小组成员具体分
2、工小组成员:马晓林,杨金川马晓林:主要编写程序,查找错误,学习相关知识,查找相关资料,提出创新思想。杨金川:编程查相关资料,书籍,查找错误,讨论问题,提出功能等。三、需求分析与设计1、程序结构有 loop 循环, BIOS 文本显示,子程序等。2、关键指令分析该程序所涉及的关键指令及分析如下:指令: MOV AH, 02H/01h INT 21H DOS 键盘操作( INT 21H)的功能 02 能等待从键盘输入一个字符,但是输入字符,而且不进行Ctrl_C 或 Ctrl_Break 的检查处理。让操作者可以通过键盘控制小车,例如上、下、左、右的操纵小车指令: MOV AH,02H MOV B
3、H,0 MOV DH,8 MOV DL,0 INT 10H BIOS 中断类型 10H 的功能 2 设置光标位置。光标位置的行号设在DH 寄存器中,列号设在 DL 中。而 BH 是包含的页号。使字符在屏幕的相应位置中输出,同时也能使字符串有相应的位置输出,显示相应界面。指令: MOV AH,09H LEA DX,STR(或 MOV DX,OFFSET STR1)INT 21H DOS显示操作 INT 21H的功能 9是显示字符串,它要求被显示输出的字符以$字符(24H)作为定界符。而DS:DX=缓冲区首地址,所以将字符串的首地址附给 DX。显示字符串。例如:显示出界面的字符串,让玩家知道如何操
4、作界面。指令: MOV AH,6 MOV AL ,0 MOV BH,09FH MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 INT 10H 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - INT 10H 的功能 6 能使屏幕内容上卷的行,这个功能需要设置7 个参数。其中AL=0 初始化窗口,就是清屏的功能。而CH/CL=左上角行 /列号, DH/DL= 右下角行/列刷新屏幕,显示出设定颜色的屏幕,
5、同时刷新,使小车移动时候,清除旧的小车痕迹。MOV ah,0fh ;读取当前显示方式,显示小车图案应用int 10h 3、运行环境通过 Masm for Windows 集成实验环境编写代码,执行并运行程序,分析修改代码。4、程序功能主要有:(1)清屏,显示出背景属性。(2)置光标位置显示字符及其属性,显示字符串,给予玩家操作界面的说明。(3)判断键盘输入,查看玩家输入的键,得到相应的操作。(4)玩家开始游戏,通过相应的操作控制小车。(5)循环第一至第四的功能。(简要说明:进入DOS/BIOS 界面,主界面显示出字符串,给予玩家操作提示,能开始游戏 (run) ,查看操作说明 (help),退
6、出(exit),如果开始, 玩家能同过w ,s , a , d等键盘输入控制小车上、下、左、右,还有1键是小车一直移动,同时 q为返回或退出,任意键为退出。校车驶出车道会退出界面5、程序流程:四、代码及分析开始主页面操作,选择输入 r 输入 h 输入 0 输入 q Game 界面,小车运动Help 界面退出操作操作名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - data segment car db 11 ;小车图案db 0b
7、1h,70h,0,0 db 0b1h,70h,0,1 db 052h,70h,0,1 db 0dbh,7,1,2 db 0dbh,7,0,-1 db 0dbh,7,0,-1 db 0dbh,7,0,-1 db 0dbh,7,0,-1 db 04fh,7,1,0 db 04fh,7,0,4 db 03ah,7,0,3 road db 80 dup(*) ;车道m1 db 10 ;定义小车的起始位置m2 db 10 data ends data1 segment ;主页面提示str1 db 0ah,0dh,20 dup(?),db 0ah,0dh,20 dup(?), huan ying come
8、 in zhu ye mian! db 0ah,0dh db 0ah,0dh,20 dup(?),* db 0ah,0dh,20 dup(?),* please enter the chose !* db 0ah,0dh,20 dup(?),*1. enter r come in game yemian !* db 0ah,0dh,20 dup(?),*2. enter q go quit !* db 0ah,0dh,20 dup(?),*3. enter h come in help yemian !* db 0ah,0dh,20 dup(?),*4. enter 0 restart ent
9、er !* db 0ah,0dh,20 dup(?),*:$ str2 db 0ah,0dh,20 dup(?),db 0ah,0dh,20 dup(?), huan ying come in help yemian! ;help页面db 0ah,0dh db 0ah,0dh,20 dup(?),* db 0ah,0dh,20 dup(?),* please watch the chose !* db 0ah,0dh,20 dup(?),* enter d the car - !* db 0ah,0dh,20 dup(?),* enter a the car - !* db 0ah,0dh,2
10、0 dup(?),* enter w the car up !* db 0ah,0dh,20 dup(?),* enter s the car down !* db 0ah,0dh,20 dup(?),* enter 1 the car move !* db 0ah,0dh,20 dup(?),* db 0ah,0dh,20 dup(?),*1. enter 1 restart comeback yemian !* db 0ah,0dh,20 dup(?),*2. enter r comein game yemian !* db 0ah,0dh,20 dup(?),*3. enter q qu
11、it game !* db 0ah,0dh,20 dup(?),*:$data1 ends 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - code segment assume ds:data,cs:code start:mov ax,data mov ds,ax again: call clear ;调用清屏call yemian ;调用主页面mov ah,01h int 21h cmp al,72h ;输入 r,跳转到
12、game页面je game cmp al,68h ;h调用help页面je help cmp al,30h ;输入 0,跳转到 again je start1 cmp al,71h je out1 ;输入r,跳转到 game页面out1: mov ah,4ch int 21h start1:call delay1 ;调用延时jmp again game: call game1 yemian proc near ;* 主页面显示选择 * mov ax,data1 mov ds,ax push ax push bx push cx push dx mov ah,2 ;显示方式mov bh,0 mo
13、v dh,5 mov dl,0 int 10h mov dx,offset str1 mov ah,9 int 21h pop dx pop cx pop bx pop ax ret yemian endp ;* help proc near ;*help 页面显示选择 * mov ax,data1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - mov ds,ax call clear push ax push bx pus
14、h dx mov ah,2 ;显示方式mov bh,0 mov dh,3 mov dl,0 int 10h mov dx,offset str2 mov ah,9 int 21h mov ah,01h int 21h cmp al,31h ;输入1,跳转到 yemian je again cmp al,72h ;输入r,跳转到 game页面je game cmp al,71h ;输入q,退出 game je out2 out2:mov ah,4ch int 21h pop dx pop bx pop ax ret help endp ;* game1 proc near ;*进入游戏界面 *
15、push ax push dx mov ax,data mov ds,ax aa:call clean ;调用clean清屏lea si,car mov dh,m2 ;行数mov dl,m1 ;代表列数小车起始位置( m2,m1)call display call roaddis mov ah,07h int 21h cmp al,64h ;按d键往前移动je s1 cmp al,61h ;按a键往后移动名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - -
16、 - - - - - - je s2 cmp al,77h ;按w键往上移动je s3 cmp al,73h ;按s键往下移动je s4 cmp al,31h ;按1键连续移动je move jmp exit s1: add m1,2 call delay1 jmp aa s2: sub m1,2 call delay1 jmp aa s3: sub m2,2 call delay1 cmp m2,4 ;当m2=4时退出,可以当做车道出轨je exit jmp aa s4: add m2,2 call delay1 cmp m2,16 ;当m2=16时退出,可以当做车道出轨je exit jm
17、p aa move: lp1:call clean ;调用clean清屏call roaddis ;调用车道lea si,car mov dh,m2 mov dl,m1 call display mov cx,50 add m1,2 call delay1 loop lp1 exit:mov ah,4ch int 21h pop dx pop ax game1 endp delay1 proc near ;* 小车移动延时子程序 * push cx push dx mov dx,1000 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
18、- - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - l1:mov cx,1800 l2:loop l2 dec dx jnz l1 pop dx pop cx ret delay1 endp clear proc near ;* 主页面调用清屏 * push ax push bx push cx push dx mov ah,6 ;BIOS功能调用: AH=6屏幕初始化mov al,0 ;0表示窗口空白mov ch,0 ;ch=左上角行号mov cl,0 ;cl=左上角列号mov dh,24 ;DH=右下角行号mov dl,79 ;D
19、L=右下角列号mov bh,02h ;可改变运行环境颜色int 10h pop dx pop cx pop bx pop ax ret clear endp clean proc near ;game 程序调用清屏 * push ax push bx push cx push dx mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,7 mov dl,79 mov bh,10h int 10h mov ah,6 ;BIOS功能调用: AH=6屏幕初始化mov al,0 ;0表示窗口空白mov ch,8 ;ch=左上角行号名师资料总结 - - -精品资料欢迎下载
20、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - mov cl,0 ;cl=左上角列号mov dh,16 ;DH=右下角行号mov dl,79 ;DL=右下角列号mov bh,20h ;可改变运行环境颜色int 10h mov ah,6 mov al,0 mov ch,17 mov cl,0 mov dh,24 mov dl,79 mov bh,10h int 10h pop dx pop cx pop bx pop ax ret clean endp display
21、 proc near ;* 小车图案显示子程序 * push ax push bx mov ah,0fh ;读取当前显示方式int 10h sub ch,ch mov cl,si inc si next:add dh,si+2 add dl,si+3 mov ah,2 ;设置光标位置int 10h mov 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 bx pop ax ret display endp 名师资料总结 - - -精品资料欢迎
22、下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - roaddis proc near ;* 车道 * push ax push bx push cx push dx mov ah,02h ;置光标位置在( 12,0)位置mov dh,12 mov dl,0 int 10h lea di,road ;显示道路标示mov cx,80 q1:mov al,di mov ah,0eh ;道路显示方式int 10h inc di loop q1 pop dx pop cx
23、pop bx pop ax ret roaddis endp code ends endstart 使用 DOS 和 BIOS 混合使用,可以实现界面转换,通过控制实现小车的基本功能,并且小车驶出车道会退出界面,实现小车安全行驶功能。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 五、实验总结通过了这次汇编的实验, 我们小组对使用各指令有了更深刻的体会,同时也加速了对汇编的认识对掌握指令使用有了进一步的认识。这次实验设计, 使我们加强了对书本知识的巩固, 还有课外资料的了解, 开始我们查找了许多资料, 让我们的自学能力得到了很好的锻炼, 在编程是我们遇到了很多困难, 但我们翻阅资料不断设计和更新,最终成功了。期间我们发现了自身许多不足,并改正。对汇编语言也有了更深的理解。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -
限制150内