您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 汇编吃豆子程序课程设计最终版
1湖南农业大学东方科技学院课程论文(设计)学部:理工学部班级:08姓名:WC学号:2008课程论文(设计)题目:吃豆子程序课程名称:汇编语言与微机原理评阅成绩:评阅意见:成绩评定教师签名:日期:年月日2目录一、概要及关键词................................1二、课程设计题目................................2三、设计思想简述................................2四、程序流程图..................................3五、程序源代码................................4-7六、程序运行过程................................8七、课程设计总结报告.........................9-10八、参考文献...................................101吃豆子程序学生:WC摘要:本程序通过汇编语言来实现在屏幕上显示多行“豆子”(用“.”表示),用一个“嘴巴”(用字符“C”表示),程序运行时,单击空格,“嘴巴”开始从左到右逐行还是“吃豆子”,一直到“豆子”被吃完停止或者单击空格暂停。这个程序是在Windowsxp的平台上的MASM5进行编译的。此程序提供一个可视化游戏界面,通过键盘输入相应的操作后,便可以执行整个游戏程序。当再次空格或整局游戏完成后重新开始整个游戏,也可以通过键盘输入定义的字符后,退出程序。通过本次汇编程序的设计,使我进一步熟练掌握了汇编程序中的一些相关命令的使用。讲书本理论知识在现实中得到实际的应用,帮助我进一步的了解汇编语言编程的一些原理关键词:数据段中断子程序代码段调用主程序Abstract:Thisassemblylanguageprogramtoachievethroughthescreendisplaysmultiplelinesofbeans(with.representation),withamouth(withthecharacterCthat),theprogramruns,clickthebox,MouthlinebylinestartingfromlefttorightorPacmanhasalwaysbeentobeansisfinishedclicktheboxtostoporpause.ThisprogramisintheplatformWindowsxpMASM5compiled.Thisprogramprovidesavisualgameinterface,thecorrespondingoperationbykeyboardinput,thentheycanexecutethegameprogram.WhenthespaceortheentireBoardagainafterthegametostartthegame,youcanalsodefinethecharacterkeyboardinput,exittheprogram.ThroughthedesignofthisassemblersoIfurthermasteredsomeoftheassociatedassemblercommands.Theoreticalknowledgeaboutthebookbeenintherealpracticalapplication,tohelpmebetterunderstandsomeoftheprinciplesofassemblylanguageprogrammingKeywords:DatasegmentInterruptSubroutineCodesegmentThemainprogram2一、课程设计题目(分析)我选择汇编语言与微机原理课程设计的题目是吃豆子程序。之所以选择这个题目,是因为我觉得这个课程设计做出来会比较有意思,对于爱好游戏的广大学生来说也有一定的实用价值;这个题目相对而言不是很简单,它不但要运用我们上课所学的知识,还涉及到许多课外的内容。吃豆子程序设计题目要求:在屏幕上显示多行“豆子”(用“.”表示),用一个“嘴巴”(用字符“C”表示),程序运行时,单击空格,“嘴巴”开始从左到右逐行还是“吃豆子”,一直到“豆子”被吃完停止或者单击空格暂停。用字符“C”表示嘴巴。用“.”表示豆子;首先屏幕上要布满“.”也就是豆子;然后字符“C”每走一步,此时豆子也要在相应位置减少一个,直到豆子被吃完或者按空格键停止游戏。二、设计思想简述对于这个题目我的设计思想是:首先定义一个字符串,内容为字符“C”的ASCⅡ值还有其他的一些相关信息,然后把屏幕设置多行豆子,或者布满豆子,把“C”每往前走一格就把该位子上的豆子变为空格键,即“C”遇到非空格就跳转到下一步;这样一颗豆子就吃掉了,只要依次循环下去,就可以把豆子全部吃掉,或者中间按空格,暂停游戏。3三、主要程序框图开始输入界面提示输入任意字符AL输出字符串STR字符串STR首地址输出修改字符串调用延时程序CX/DX入栈保护现场RUZHANCX/DX出栈恢复现场程序结束空格-STR[]DIC-STR[DI]DI+1-DIDI为空4四、程序源代码assumecs:code,es:data;assue:段寄存器伪指令。所谓关联,指某一段寄存器使用某一指定的段空间。cs:code,ds:data,代码段寄存器cs与code关联;数据段寄存器ds与data关联。datasegment;定义数据段temp1dw?temp2dw?;定义段temp1和temp2dataendscodesegment;定义程序代码段inal,60H;从端口60输入内容并传送到alcmpal,57;比较送到al的数与57(在ascll码中代表十进制的9)的差jnznospace;执行跳转movcx,1;把立即数1送到cxnospace:moval,20H;设置INT1Fh字体指针out20H,al;向0x20I/O地址送0x20的数据iret;中断返回程序start:movah,00H;00H设置显示模式moval,02H;02H用文本坐标下设置光标位置int10H;BIOS对屏幕及显示器所提供的服务程序5movah,02H;02H用文本坐标下设置光标位置movdl,'.';取要显示的字符到DL中movcx,80*25;dos最大屏幕表示量,默认最大显示量就是80*25setpoint:int21H;调用系统中断,键盘输入loopsetpoint;循环指令testkey:;模拟键盘的空格健动作movah,07H;调用07H设置屏幕滚屏显示int21H;调用系统中断,键盘输入cmpal,'';比较指令,保证全为空格jnzexit;不为空格则跳转movax,0movds,ax;把段地址0通过寄存器ax送到dsmovax,datamoves,axmovbx,9*4+2;把偏移地址送到bxmovax,[bx];寄存器间接寻址方式,把bx地址所指的值送给axmoves:temp1,axmovax,codemov[bx],ax;把AX的值赋予BX所指向的内存单元movbx,9*4;把段地址送到bxmovax,[bx]moves:temp2,axmovwordptr[bx],0;类型操作符对名字或标号的类型属性进行有关设置movah,02H;02H用文本坐标下设置光标位置6movbh,0xordx,dx;二进制运算做清0操作,dx清0int10Hmovax,0B800H;文本模式下显存起始地址;0a000h是图形模式下显存起始地址movds,ax;把ax的值送到数据段xorbx,bx;二进制运算做清0操作,bx清0movcx,80*25;dos最大屏幕表示量,默认最大显示量就是80*25eatpea:movsi,0FFFFH;代表在25×80的文本显示方式下,屏幕可有2000个字符位置,(si为源变址寄存器,si与di有自动增量和自动减量功能,用于变址很方便)movdi,004FFHdelay:subsi,1;将si-1的值送到sijnzdelay;不为0就继续si-1,即吃下一个豆子subdi,1;将di-1的值送到dijnzdelay;不为0就继续di-1,即翻到下一页movbyteptr[bx],'';把“”的第一个字节的内容送到bx并把它的操作类型定义为字节movbyteptr[bx+2],'C';把“C”的第一个字节的内容送到bx+2并把它的操作类型定义为字节addbx,2;将bx+2的值赋给bxloopeatpeamovax,07movds,ax;把立即数0通过ax寄存器送到ds数据段寄存器movbx,9*4+2movax,es:temp1;把附加段中temp1中的内容通过ax送到bxmov[bx],axmovbx,9*4movax,es:temp2mov[bx],ax;把附加段中temp2中的内容通过ax送到bxinal,60h;读取键盘值cmpal,10hjequit;执行跳转jmpstart;空格键则跳到开始quit:movax,4c00hint21h;中断调用程序exit:movah,07H;利用07号DOS系统功能调用退回DOSint21H;调用系统中断movax,4C00H;调用INT21H的4CH号中断,安全退出程序int21H;调用系统中断codeendsendstart8五、程序运行过程(1)编译:*:在windowsxp系统下运行MASM汇编软件,编译程序,无错误与警告,执行下一步。(2)链接:*:在编译无错误警告之后进行链接,出现警告,因为不影响运行结果,继续执行下一步。(3)执行:9*:上示截图为运行时的画面,通过键盘输入空格键后执行吃豆子游戏程序。六、课程设计总结报告(1)课程设计中所遇到的主要问题和解决方法。在课程设计的过程当中遇到的主要问题就是对整个汇编知识不是很熟悉,部分代码不能灵活运用,也有部分代码不能理解,因此在设计过程中花了较多时间查阅书籍跟浏览网上资料;在编写完整个程序后,编译、链接、运行时,第一次按空格键开始吃豆子,再按空格键停止吃豆子,但是第三次按空格键时则出现D:\MASM等字符,如果继续按空格键则出现了手动吃豆子的现象,如果在D:\MASM后输入“文件名”则重新开始整个游戏;但是通过对整个程序的检查,我发现在源代码循环部分后少了一部分退出游戏的源代码,因此我加了一段关于按空格键退出或重新开始游戏的源代码解决了此问题;再一个就是DOS指令不能灵活运用,导致程序运行过程中纰漏百出,这样也浪费了不少时间,最后通过多次尝试修改,终于完成了整个程序设计。(2)创新和得意之处。这个吃豆子游戏的程序的创新之处主要体现在整个程序能以一种可视化的动态界面看到类似于“吃豆子”的动作;当然这个过程也是比较巧妙的,字符“C”本身就象形与吃豆子的嘴,而“.”也很像豆子,整个程序运行起来生动形象,再者就是整个游戏通过空格键控制游戏的开始,重新开或者退出游戏,整个过程快捷方便。(3)课程设计中存在的不足,需要进一步改进的设想。这个程序设计存在的不足主要表现在当第一次按空格键暂停后,再按空格键就重新开始游戏了,或者按空格键,然后回车键,再输入“文件名”就重新开始整个游戏了,此点需要改进应当编写成按空格键开始游戏,再按空格键暂停,又按空格键继续,按回车键退出游戏;当然如果能达到一定的高度,这个吃豆子10游戏也可以修改成人为操作的一个小游戏程序,可人手动以控制吃豆子的方向,速度等,因此我会继续努力,不断提高自己编程的能力,编写出有趣味的小游戏程序。(4)课程设计的感想和心得体会。通过本次汇编语言课程设计,让我更加明白实践的重要性,如果整天的学习课本上的理论知识而不拿来用那肯定是很烦的,不但要去理解各种指令的功能,还要学习相应的硬件知识。再者,学习理论知识的目的还是要拿来运用,通过实践来巩固所学的理论知识。并且通过这次课程设计
本文标题:汇编吃豆子程序课程设计最终版
链接地址:https://www.777doc.com/doc-4312807 .html