汇编语言动态小车课设报告.docx
- 文档编号:8197696
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:21
- 大小:38.73KB
汇编语言动态小车课设报告.docx
《汇编语言动态小车课设报告.docx》由会员分享,可在线阅读,更多相关《汇编语言动态小车课设报告.docx(21页珍藏版)》请在冰豆网上搜索。
汇编语言动态小车课设报告
摘要1
1动态小车功能简介2
1.1功能简介2
1.2程序流程图2
2.预备知识3
3.任务分析4
3.1.程序功能分析4
3.2程序设计意义5
4.程序设计说明5
4.1设计小车的形状5
4.2完成对小车的一次显示5
4.3调用擦除子程序6
4.4动态监测键盘输入7
4.4延时子程序7
5.实际效果显示图8
6.总结与体会8
附录9
摘要
本课程设计主要是基于《微机原理与接口技术》的学习的基础上实现的,程序设计主要是由汇编语言完成。
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。
在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。
汇编程序将符号化的操作代码组装成处理器可以识别的机器指令,这个组装的过程称为组合或者汇编。
本设计是根据汇编语言的特性,完成小车的动态显示的功能,并且结合实际情况,增加某些附加功能,以使设计更加完善,形成具有一定功能的完整的应用程序。
关键词:
动态小车汇编8086
1动态小车功能简介
1.1功能简介
本课程设计采用16位微处理器8086CPU以及86系列微型计算机指令系统,使用MasmforWindows集成实验环境进行汇编并在DOSBox软件中运行,完成了动态小车的显示,实时监测键盘输入,并且根据相应输入完成对应的功能。
1.2程序流程图
2.预备知识
该程序所涉及的关键指令及分析如下:
指令1:
MOVAH,09H
LEADX,STR1(或MOVDX,OFFSETSTR1)
INT21H
分析:
DOS显示操作INT21H的功能9是显示字符串,它要求被显示输出的字符以$字符(24H)作为定界符。
而DS:
DX=缓冲区首地址,所以将字符串的首地址附给DX。
作用:
显示字符串。
例如:
显示出界面的字符串,让玩家知道如何操作界面。
指令2:
MOVAH,02H
MOVBH,0
MOVDH,8
MOVDL,0
INT10H
分析:
BIOS中断类型10H的功能2设置光标位置。
光标位置的行号设在DH寄存器中,列号设在DL中。
而BH是包含的页号。
作用:
使字符在屏幕的相应位置中输出,同时也能使小车有相应的位置输出,显示出小车图形。
其中,小车移动,就是改变当中的列号,使列号增或减。
简单的说,就是确定输出的位置。
指令3:
MOVAH,07H
INT21H
分析:
DOS键盘操作(INT21H)的功能07能等待从键盘输入一个字符,但是输入字符不回显,而且不进行Ctrl_C或Ctrl_Break的检查处理。
作用:
让操作者可以通过键盘控制小车,例如上、下、左、右的操纵小车
指令4:
MOVAH,09H
MOVAL,’@’
MOVBL,08EH
MOVCX,1
INT10H
分析:
10H的功能9能把一个字符送到显示屏幕,并且该功能能输出字符串的属性和输出次数,其中,AL存放的是字符,BL存放是属性,CX存放的是次数。
作用:
逐个字符输出,是全部字符输出后显示一个小车的图案。
同是利用此条指令也能输出公路的图案。
3.任务分析
3.1.程序功能分析
第一,清屏,显示出背景属性。
第二,置光标位置显示字符及其属性,显示出小车图像
第三,判断键盘输入,检查是否有按键按下,并且检测到相应的按键后,给特定的标志变量赋特定值。
第四,擦除这一时刻屏幕显示的小车。
第五,根据标志变量的值对小车的下一时刻位置给予对应的操作。
第六,循环第二至第五的功能。
3.2程序设计意义
根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试汇编语言程序的经验;通过完成本次课程设计的要求,逐渐培养学生的编程能力、用计算机解决实际问题的能力
4.程序设计说明
4.1设计小车的形状
CARDB7
DB0DBH,7,0,0
DB0B1H,5,0,1
DB0DBH,6,0,1
DB0DBH,18,0,1
DB4FH,11,1,0
DB4FH,11,0,-3
DB2,10,-2,1
4.2完成对小车的一次显示
PLOT_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOV_CRSR:
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,[DI+1];取字符值及属性
PUSHCX
MOVCX,1
MOVAH,09;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPPLOT_NEXT
4.3调用擦除子程序
ERASE1PROCNEAR;左走
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
ERASE1_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,0
PUSHCX
MOVCX,1
MOVAH,9;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPERASE1_NEXT
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
DECCOL_ON
CMPCOL_ON,1
JNCNEXT1
MOVCOL_ON,79
NEXT1:
MOVDL,COL_ON
RET
ERASE1ENDP
此子程序调用,将擦除之前显示的小车,并且将确定下一次小车将要出现的位子,并且将对应的值赋给要显示的变量,此程序是确定下一步往左走,确定方向的
DECCOL_ON
CMPCOL_ON,1
JNCNEXT1
MOVCOL_ON,79
NEXT1:
MOVDL,COL_ON
RET
要更改方向只需改上面的一步即可,往右、上、下甚至停止的子程序都和它类似
4.4动态监测键盘输入
MOVAH,1
INT16H
JNZKS1
MOVAX,0FFH
STC
RET
KS1:
MOVAH,7
INT21H
MOVAH,0
CMPAL,0
JNZKS2
MOVAH,7
INT21H
MOVAH,1
CLC
KS2:
完成键盘输入后,该对应的值是存放在AL中,并且该键盘监测是不需要等待的
4.4延时子程序
TIMEPROCNEAR;延时子程序
PUSHCX
PUSHDX
CALLKEYSCAN
CMPFLAG1,4
JZSS55
CMPFLAG1,5
JZSS66
JMPNEXT11
SS55:
ADDSJ,1000
MOVFLAG1,0
JMPNEXT11
SS66:
SUBSJ,1000
JZFL1
JMPFL2
FL1:
MOVSJ,1000
FL2:
MOVFLAG1,0
JMPNEXT11
NEXT11:
MOVDX,SJ
D11:
MOVCX,SJ
D12:
LOOPD12
DECDX
JNZD11
POPDX;恢复寄存器
POPCX
RET;返回主程序
TIMEENDP
该子程序主要是完成对小车速度的控制,通过改变延时的长短来控制小车的速度
此外,本设计还加了停车,发声和退出部分,在此就不一一列举
5.实际效果显示图
6.总结与体会
通过这次微机原理与接口技术课程设计,我们对微机原理有了更加深刻的理解。
在编程与调试的过程中,我的编程思路有了新的提升,并有效结合我们已经学习到的理论知识与网络上搜集来的各种资料来实现的。
在这个不断优化课程设计作品的过程中,我们不仅巩固了已经掌握的知识,也从网络渠道学习到了新的知识,发现新的设计思路,收益良多。
回顾本次课程设计,我们熟练掌握了8086汇编语言编写应用程序和实际设计中的软件调试方法与步骤。
在汇编编程方面都有了长足的长进与新而深刻的认识,同时对各子程序组合起来的主程序也有着清楚的认识。
第一次体会到了把各种子程序并入主程序的模块化编程过程的复杂,相信这样的经历对将来的工作和发展都有很大的帮助。
总而言之,这次课程设计,从多个方面获得了不同的提升,受益匪浅。
同时也感谢老师的辛勤知道与付出,在此深表感谢。
附录
DATASEGMENT
CARDB7
DB0DBH,7,0,0
DB0B1H,5,0,1
DB0DBH,6,0,1
DB0DBH,18,0,1
DB4FH,11,1,0
DB4FH,11,0,-3
DB2,10,-2,1
CHAR_CNTDW?
POINTERDW?
LINE_ONDB?
COL_ONDB?
FLAGDB0
FLAG1DB0
SJDW10000
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MAINPROCFAR
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA;初始化DS
MOVDS,AX
MOVAH,0;设置300×200黑白图形方式
MOVAL,7
INT10H
LEADI,CAR;DI指向字符图形表
MOVDH,5;从第5行5列位置开始
MOVDL,45;显示汽车
CALLMOVE_SHAPE
RET
MAINENDP
MOVE_SHAPEPROCNEAR
PUSHAX;保护寄存器
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAH,0FH;取当前显示方式
INT10H
SUBCH,CH;清除计数器CX的高字节
MOVCL,[DI];CL放循环次数
INCDI;DI指向字符图形表中的第一个字符
MOVCHAR_CNT,CX;保存循环次数
MOVPOINTER,DI
MOVLINE_ON,DH
MOVCOL_ON,DL
PLOT_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOV_CRSR:
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,[DI+1];取字符值及属性
PUSHCX
MOVCX,1
MOVAH,09;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPPLOT_NEXT
CALLKEYSCAN
CALLTIME;调用延时子程序
CMPFLAG,0
JZSS1
CMPFLAG,1
JZSS2
CMPFLAG,2
JZSS3
CMPFLAG,3
JZSS4
CMPFLAG,6
JZSS10
SS1:
CALLERASE2;调用擦除子程序
JMPSHORTPLOT_NEXT
SS2:
CALLERASE1;调用擦除子程序
JMPSHORTPLOT_NEXT
SS3:
CALLERASE3;调用擦除子程序
JMPSHORTPLOT_NEXT
SS4:
CALLERASE4;调用擦除子程序
JMPSHORTPLOT_NEXT
SS10:
CALLSTOP;调用擦除子程序
JMPSHORTPLOT_NEXT
MOVE_SHAPEENDP
KEYSCANPROCNEAR
MOVAH,1
INT16H
JNZKS1
MOVAX,0FFH
STC
RET
KS1:
MOVAH,7
INT21H
MOVAH,0
CMPAL,0
JNZKS2
MOVAH,7
INT21H
MOVAH,1
CLC
KS2:
CMPAL,'a'
JZsk1
CMPAL,'d'
JZsk2
CMPAL,'w'
JZsk3
CMPAL,'s'
JZsk4
CMPAL,'n'
JZsk6
CMPAL,'m'
JZsk7
CMPAL,'p'
JZsk8
CMPAL,'q'
JZsk9
CMPAL,'b'
JZsk10
JMPsk5
sk1:
MOVFLAG,1
JMPsk5
sk2:
MOVFLAG,0
JMPsk5
sk3:
MOVFLAG,2
JMPsk5
sk4:
MOVFLAG,3
JMPsk5
sk6:
MOVFLAG1,4
JMPsk5
sk7:
MOVFLAG1,5
JMPsk5
sk8:
MOVFLAG,6
JMPsk5
sk9:
MOVAX,4C00H
INT21H
JMPsk5
sk10:
MOVDL,7
MOVAH,02H
INT21H
JMPsk5
sk5:
RET
KEYSCANENDP
STOPPROCNEAR;停止
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
STOP_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,0
PUSHCX
MOVCX,1
MOVAH,9;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPSTOP_NEXT
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
RET
RET
STOPENDP
ERASE1PROCNEAR;左走
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
ERASE1_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,0
PUSHCX
MOVCX,1
MOVAH,9;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPERASE1_NEXT
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
DECCOL_ON
CMPCOL_ON,1
JNCNEXT1
MOVCOL_ON,79
NEXT1:
MOVDL,COL_ON
RET
ERASE1ENDP
ERASE2PROCNEAR;右走
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
ERASE2_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,0
PUSHCX
MOVCX,1
MOVAH,9;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPERASE2_NEXT
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
INCCOL_ON
CMPCOL_ON,77
JCNEXT2
MOVCOL_ON,0
NEXT2:
MOVDL,COL_ON
RET
ERASE2ENDP
ERASE3PROCNEAR;上走
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
ERASE3_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,0
PUSHCX
MOVCX,1
MOVAH,9;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPERASE3_NEXT
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDL,COL_ON
DECLINE_ON
CMPLINE_ON,1
JNCNEXT3
MOVLINE_ON,24
NEXT3:
MOVDH,LINE_ON
RET
ERASE3ENDP
ERASE4PROCNEAR;下走
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
ERASE4_NEXT:
ADDDH,[DI+2];改变行列指针
ADDDL,[DI+3]
MOVAH,2;移动光标位置
INT10H
MOVAL,[DI]
MOVBL,0
PUSHCX
MOVCX,1
MOVAH,9;显示字符
INT10H
POPCX
ADDDI,4;DI指向下一个字符
LOOPERASE4_NEXT
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDL,COL_ON
INCLINE_ON
CMPLINE_ON,24
JCNEXT4
MOVLINE_ON,0
NEXT4:
MOVDH,LINE_ON
RET
ERASE4ENDP
TIMEPROCNEAR;延时子程序
PUSHCX
PUSHDX
CALLKEYSCAN
CMPFLAG1,4
JZSS55
CMPFLAG1,5
JZSS66
JMPNEXT11
SS55:
ADDSJ,1000
MOVFLAG1,0
JMPNEXT11
SS66:
SUBSJ,1000
JZFL1
JMPFL2
FL1:
MOVSJ,1000
FL2:
MOVFLAG1,0
JMPNEXT11
NEXT11:
MOVDX,SJ
D11:
MOVCX,SJ
D12:
LOOPD12
DECDX
JNZD11
POPDX;恢复寄存器
POPCX
RET;返回主程序
TIMEENDP
CODEENDS
ENDMAIN;程序结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 动态 小车 报告