您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 汇编语言动态小车课设报告
摘要.................................................-1-1动态小车功能简介...................................-2-1.1功能简介......................................-2-1.2程序流程图....................................-2-2.预备知识...........................................-3-3.任务分析...........................................-4-3.1.程序功能分析..................................-4-3.2程序设计意义...................................-4-4.程序设计说明.......................................-4-4.1设计小车的形状.................................-4-4.2完成对小车的一次显示...........................-4-4.3调用擦除子程序.................................-5-4.4动态监测键盘输入...............................-6-4.4延时子程序....................................-6-5.实际效果显示图.....................................-8-6.总结与体会.........................................-8-附录.................................................-9--1-摘要本课程设计主要是基于《微机原理与接口技术》的学习的基础上实现的,程序设计主要是由汇编语言完成。汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。汇编程序将符号化的操作代码组装成处理器可以识别的机器指令,这个组装的过程称为组合或者汇编。本设计是根据汇编语言的特性,完成小车的动态显示的功能,并且结合实际情况,增加某些附加功能,以使设计更加完善,形成具有一定功能的完整的应用程序。关键词:动态小车汇编8086-2-1动态小车功能简介1.1功能简介本课程设计采用16位微处理器8086CPU以及86系列微型计算机指令系统,使用MasmforWindows集成实验环境进行汇编并在DOSBox软件中运行,完成了动态小车的显示,实时监测键盘输入,并且根据相应输入完成对应的功能。1.2程序流程图-3-2.预备知识该程序所涉及的关键指令及分析如下:指令1:MOVAH,09HLEADX,STR1(或MOVDX,OFFSETSTR1)INT21H分析:DOS显示操作INT21H的功能9是显示字符串,它要求被显示输出的字符以$字符(24H)作为定界符。而DS:DX=缓冲区首地址,所以将字符串的首地址附给DX。作用:显示字符串。例如:显示出界面的字符串,让玩家知道如何操作界面。指令2:MOVAH,02HMOVBH,0MOVDH,8MOVDL,0INT10H分析:BIOS中断类型10H的功能2设置光标位置。光标位置的行号设在DH寄存器中,列号设在DL中。而BH是包含的页号。作用:使字符在屏幕的相应位置中输出,同时也能使小车有相应的位置输出,显示出小车图形。其中,小车移动,就是改变当中的列号,使列号增或减。简单的说,就是确定输出的位置。指令3:MOVAH,07HINT21H分析:DOS键盘操作(INT21H)的功能07能等待从键盘输入一个字符,但是输入字符不回显,而且不进行Ctrl_C或Ctrl_Break的检查处理。作用:让操作者可以通过键盘控制小车,例如上、下、左、右的操纵小车指令4:MOVAH,09HMOVAL,’@’MOVBL,08EHMOVCX,1INT10H分析:10H的功能9能把一个字符送到显示屏幕,并且该功能能输出字符串的属性和输出次数,其中,AL存放的是字符,BL存放是属性,CX存放的是次数。作用:逐个字符输出,是全部字符输出后显示一个小车的图案。同是利用此条指令也能输出公路的图案。-4-3.任务分析3.1.程序功能分析第一,清屏,显示出背景属性。第二,置光标位置显示字符及其属性,显示出小车图像第三,判断键盘输入,检查是否有按键按下,并且检测到相应的按键后,给特定的标志变量赋特定值。第四,擦除这一时刻屏幕显示的小车。第五,根据标志变量的值对小车的下一时刻位置给予对应的操作。第六,循环第二至第五的功能。3.2程序设计意义根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试汇编语言程序的经验;通过完成本次课程设计的要求,逐渐培养学生的编程能力、用计算机解决实际问题的能力4.程序设计说明4.1设计小车的形状CARDB7DB0DBH,7,0,0DB0B1H,5,0,1DB0DBH,6,0,1DB0DBH,18,0,1DB4FH,11,1,0DB4FH,11,0,-3DB2,10,-2,14.2完成对小车的一次显示PLOT_NEXT:ADDDH,[DI+2];改变行列指针ADDDL,[DI+3]MOV_CRSR:-5-MOVAH,2;移动光标位置INT10HMOVAL,[DI]MOVBL,[DI+1];取字符值及属性PUSHCXMOVCX,1MOVAH,09;显示字符INT10HPOPCXADDDI,4;DI指向下一个字符LOOPPLOT_NEXT4.3调用擦除子程序ERASE1PROCNEAR;左走MOVCX,CHAR_CNTMOVDI,POINTERMOVDH,LINE_ONMOVDL,COL_ONERASE1_NEXT:ADDDH,[DI+2];改变行列指针ADDDL,[DI+3]MOVAH,2;移动光标位置INT10HMOVAL,[DI]MOVBL,0PUSHCXMOVCX,1MOVAH,9;显示字符INT10HPOPCXADDDI,4;DI指向下一个字符LOOPERASE1_NEXTMOVCX,CHAR_CNTMOVDI,POINTERMOVDH,LINE_ONDECCOL_ONCMPCOL_ON,1JNCNEXT1MOVCOL_ON,79NEXT1:MOVDL,COL_ONRETERASE1ENDP-6-此子程序调用,将擦除之前显示的小车,并且将确定下一次小车将要出现的位子,并且将对应的值赋给要显示的变量,此程序是确定下一步往左走,确定方向的DECCOL_ONCMPCOL_ON,1JNCNEXT1MOVCOL_ON,79NEXT1:MOVDL,COL_ONRET要更改方向只需改上面的一步即可,往右、上、下甚至停止的子程序都和它类似4.4动态监测键盘输入MOVAH,1INT16HJNZKS1MOVAX,0FFHSTCRETKS1:MOVAH,7INT21HMOVAH,0CMPAL,0JNZKS2MOVAH,7INT21HMOVAH,1CLCKS2:完成键盘输入后,该对应的值是存放在AL中,并且该键盘监测是不需要等待的4.4延时子程序TIMEPROCNEAR;延时子程序PUSHCXPUSHDXCALLKEYSCANCMPFLAG1,4-7-JZSS55CMPFLAG1,5JZSS66JMPNEXT11SS55:ADDSJ,1000MOVFLAG1,0JMPNEXT11SS66:SUBSJ,1000JZFL1JMPFL2FL1:MOVSJ,1000FL2:MOVFLAG1,0JMPNEXT11NEXT11:MOVDX,SJD11:MOVCX,SJD12:LOOPD12DECDXJNZD11POPDX;恢复寄存器POPCXRET;返回主程序TIMEENDP该子程序主要是完成对小车速度的控制,通过改变延时的长短来控制小车的速度此外,本设计还加了停车,发声和退出部分,在此就不一一列举-8-5.实际效果显示图6.总结与体会通过这次微机原理与接口技术课程设计,我们对微机原理有了更加深刻的理解。在编程与调试的过程中,我的编程思路有了新的提升,并有效结合我们已经学习到的理论知识与网络上搜集来的各种资料来实现的。在这个不断优化课程设计作品的过程中,我们不仅巩固了已经掌握的知识,也从网络渠道学习到了新的知识,发现新的设计思路,收益良多。回顾本次课程设计,我们熟练掌握了8086汇编语言编写应用程序和实际设计中的软件调试方法与步骤。在汇编编程方面都有了长足的长进与新而深刻的认识,同时对各子程序组合起来的主程序也有着清楚的认识。第一次体会到了把各种子程序并入主程序的模块化编程过程的复杂,相信这样的经历对将来的工作和发展都有很大的帮助。总而言之,这次课程设计,从多个方面获得了不同的提升,受益匪浅。同时也感谢老师的辛勤知道与付出,在此深表感谢。-9-附录DATASEGMENTCARDB7DB0DBH,7,0,0DB0B1H,5,0,1DB0DBH,6,0,1DB0DBH,18,0,1DB4FH,11,1,0DB4FH,11,0,-3DB2,10,-2,1CHAR_CNTDW?POINTERDW?LINE_ONDB?COL_ONDB?FLAGDB0FLAG1DB0SJDW10000DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MAINPROCFARPUSHDSSUBAX,AXPUSHAXMOVAX,DATA;初始化DSMOVDS,AXMOVAH,0;设置300×200黑白图形方式MOVAL,7INT10HLEADI,CAR;DI指向字符图形表MOVDH,5;从第5行5列位置开始MOVDL,45;显示汽车CALLMOVE_SHAPERETMAINENDP-10-MOVE_SHAPEPROCNEARPUSHAX;保护寄存器PUSHBXPUSHCXPUSHDXPUSHDIMOVAH,0FH;取当前显示方式INT10HSUBCH,CH;清除计数器CX的高字节MOVCL,[DI];CL放循环次数INCDI;DI指向字符图形表中的第一个字符MOVCHAR_CNT,CX;保存循环次数MOVPOINTER,DIMOVLINE_ON,DHMOVCOL_ON,DLPLOT_NEXT:ADDDH,[DI+2];改变行列指针ADDDL,[DI+3]MOV_CRSR:MOVAH,2;移动光标位置INT10HMOVAL,[DI]MOVBL,[DI+1];取字符值及属性PUSHCXMOVCX,1MOVAH,09;显示字符INT10HPOPCXADDDI,4;DI指向下一个字符LOOPPLOT_NEXTCALLKEYSCANCALLTIME;调用延时子程序CMPFLAG,0JZSS1CMPFLAG,1JZSS2CMPFLAG,2JZSS3CMPFLAG,3JZSS4CMPFLAG,6JZSS10-11-SS1:CALLERASE2;调用擦除子程序JMPSHORTPLOT_NEXTSS2:CALLERASE1;调用擦除子程序JMPSHORTPLOT_NEXTSS3:CALLERASE3;调用擦除子程序JMPSHORTPLOT_NEXTSS4:CALLERASE4;调用擦除子程序JMPSHORTPLOT_NEXTSS10:CALLSTOP;调用擦除子程序JMPSHORTPLOT_NEXTMOVE_SHAPEENDPKEYSCANPROCNEA
本文标题:汇编语言动态小车课设报告
链接地址:https://www.777doc.com/doc-6469244 .html