版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电气工程学院微机原理课程设计报告书课题名吃豆子程序和电子秒表班级_____________________姓名________________指导教师日期目录一:软件课程设计1.1、概要及关键词11.2、课程设计题目11.3、设计思想简述11.4、程序流程图21.5、程序源代码3-111.6、程序运行过程121.7、软件设计心得体会131.8、参考文献13二:硬件课程设计2.1、硬件设计目的142.2、硬件设计内容142.3、硬件设计要求142.4、硬件设计电路142.5、硬件程序代码14-192.6、硬件系统调试情况192.7、课程设计心得与体会202.8、参考文献20一:软件课程设计吃豆子程序1.1摘要:本程序通过汇编语言来实现在屏幕上显示多行“豆子”(用“.”表示)和“怪物”(用“3”表示),用一个“嘴巴”(用字符“C”表示),程序运行时,单击Enter进入游戏,通过方向键上下左右控制“嘴巴”的运动方向,如果遇到豆子就吃掉如果遇到怪物则游戏结束,当按Esc时游戏也会结束。这个程序是在Windows的平台上的MASM进行编译的。此程序提供一个可视化游戏界面,通过键盘输入相应的操作后,便可以执行整个游戏程序。通过本次汇编程序的设计,使我进一步熟练掌握了汇编程序中的一些相关命令的使用。讲书本理论知识在现实中得到实际的应用,帮助我进一步的了解汇编语言编程的一些原理关键词:数据段中断子程序代码段调用主程序1.2课程设计题目(分析)我选择汇编语言与微机原理课程设计的题目是吃豆子程序。之所以选择这个题目,是因为我觉得这个课程设计做出来会比较有意思,对于爱好游戏的广大学生来说也有一定的实用价值;这个题目相对而言不是很简单,它不但要运用我们上课所学的知识,还涉及到许多课外的内容。吃豆子程序设计题目要求:在屏幕上显示多行“豆子”(用“.”表示),用一个“嘴巴”(用字符“C”表示),程序运行时,单击空格,“嘴巴”开始从左到右逐行还是“吃豆子”,一直到“豆子”被吃完停止或者单击空格暂停。为了使游戏更好玩更有意思,我们讨论后将使程序通过汇编语言来实现在屏幕上显示多行“豆子”(用“.”表示)和“怪物”(用“3”表示),用一个“嘴巴”(用字符“C”表示),程序运行时,单击Enter进入游戏,通过方向键上下左右控制“嘴巴”的运动方向,如果遇到豆子就吃掉如果遇到怪物则游戏结束,当按Esc时游戏也会结束。1.3设计思想简述对于这个题目我的设计思想是:首先定义一个字符串,内容为字符“C”的ASCⅡ值还有其他的一些相关信息,然后把屏幕中设置多行多列,在行和列中随机放置豆子和怪物的位置,这就需要在编程一开始定义时就设置。进入游戏后由方向键来控制“C”的移动位置,当遇到豆子“.”时将其用空格代替使其消掉相当于吃掉了。当遇到怪物“3”时就跳出游戏,同样如果在游戏过程中按Esc也会退出游戏。1.4程序框图输入界面提示开始 输入界面提示开始输入ENTER输入ENTER进入方向键判断方向键判断后退键左行键前进键后退键左行键前进键右行键所遇字符判断所遇字符判断遇怪物“3”遇怪物“3”遇空格键遇豆子“.”变为U,调用延时变为O,调用延时变为O,调用延时调用延时循环运行结束1.5源程序代码MENUMACROOP1,OP2,OP3;菜单显示宏定义MOVAH,2MOVBH,0MOVDH,OP1MOVDL,OP2INT10HMOVAH,9LEADX,OP3INT21HENDMSTACKSEGMENTSTACKDB200DUP(0)STACKENDSDATASEGMENTDISPLAY1DB'PRESSESCKEYTOEXIT$'MSGDB'GAMEISOVER!$'ARYDB'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'DB'0','.',0,0,'3',0,0,'3',0,0,'3','3','.',0,0,0,0,'0'DB'0',0,0,'3','.','3','.',0,0,0,0,0,0,0,0,0,0,'0'DB'0',0,0,'3',0,0,'3',0,0,'3','3','.',0,0,0,0,'3','0'DB'0','3',0,0,0,0,0,'3',0,0,0,0,0,0,0,'3','.','0'DB'0','3',0,0,0,'3',0,0,'3',0,0,0,0,0,'.','3',0,'0'DB'0','.',0,0,0,'3',0,0,'.',0,0,0,'3','3','3','3',0,'0'DB'0','3','3','3','3',0,0,'3',0,0,0,0,0,0,0,0,0,'0'DB'0','3',0,'.','3',0,0,'3',0,0,0,0,0,0,0,0,0,'0'DB'0',0,0,0,0,0,'3','3',0,'3','3','3','3','3',0,0,0,'0'DB'0',0,0,0,0,0,'.','3',0,'.','3','3','.',0,0,'3','3','0'DB'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'CUR_POSDB19DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAH,0;设置显示方式MOVAL,2INT10HLOP0:MENU05,10,DISPLAY1;菜单信息的宏调用MOVAH,2;设定光标位置MOVDH,24MOVDL,0INT10HMOVAH,0;键盘中断调用INT16HCMPAL,0DH;如果按下Enter键,则进入游戏JNELOP0CALLCLEAR_SCREEN;清屏调用CALLDOU_MON;显示游戏界面MOVDH,6;设置光标位置,显示开始的字符'C'MOVDL,21MOVBH,0MOVAH,2INT10HMOVAL,'C'CALLCHAR_PLAYBEGIN:;游戏开始阶段MOVAH,0;键盘终端调用,根据用户输入的命令游戏INT16HCMPAL,1BH;如果按下ESC键,结束游戏JZEXITCALLEATBEAN;吃豆子函数调用MOVAH,2;根据命令后的行列值设置光标位置INT10HMOVAH,8;获取当前光标位置字符,字符保存在AL中INT10HCMPAL,'.'JEXING_XING;如果是'.'CMPAL,'3';如果是怪物字符‘3’JEUUUJMPCCCXING_XING:MOVAL,'O';显示字符'O'后延迟一段时间CALLCHAR_PLAYCALLDELAYJMPCCCUUU:MOVAL,'U';显示字符'U'后结束游戏CALLCHAR_PLAYCALLDELAYJMPEXITCCC:MOVAL,'C'CALLCHAR_PLAYJMPBEGINEXIT:;退出MOVAH,2MOVDX,1200HINT10HMENU19,22,MSG;显示游戏结束信息MOVAH,0;此处是为防止结束游戏后立即终止INT16HMOVAH,4CHINT21HDOU_MONPROC;界面显示函数PUSHAXPUSHBXPUSHCXPUSHDXMOVBH,0MOVDH,5MOVDL,20MOVSI,0LOP1:MOVDL,20LOP2:MOVAH,2INT10HMOVAL,ARY[SI]CALLCHAR_DISPLAYINCSIINCDLCMPDL,38JNELOP2INCDHCMPDH,17JNELOP1JIESHU:POPDXPOPCXPOPBXPOPAXRETDOU_MONENDPDELAYPROCPUSHCXPUSHDXMOVDX,51000DL500:MOVCX,10000Dl10MS:LOOPDl10MSDECDXJNEDL500POPDXPOPCXRETDELAYENDPchar_displayproc;带颜色显示数组中字符的函数PUSHAXPUSHBXPUSHDXcmpal,'3'jnexingmovbl,4jmpgoxing:cmpal,'.'jnebaimovbl,2jmpgobai:movbl,7go:movah,9movcx,1int10hPOPDXPOPBXPOPAXretchar_displayendpEATBEANPROC;吃豆子函数LEADI,ARYADDDI,WORDPTRCUR_POS;用DI保存当前光标位置对应的数组中字符的偏移地址CMPAH,4DH;按下右键JNZLEFTJMPPRLEFT:CMPAH,4BH;按下左键JNZUPJMPPLUP:CMPAH,48H;按下上键JNZDOWNJMPPUDOWN:CMPAH,50H;按下下键CALLCLEAR_SCREEN;清屏调用CALLDOU_MONJMPPDPR:INCDLCMPDL,37JNBBACK1PUSHCXMOVCL,CUR_POSADDCL,1MOVCUR_POS,CL;每向右移一步,当前位置加1POPCXMOV[DI],BYTEPTR0;数组中该处字符用空格填充CALLCLEAR_SCREEN;清屏调用CALLDOU_MONJMPTUICHUBACK1:DECDLCALLCLEAR_SCREEN;清屏调用CALLDOU_MONJMPTUICHUPL:DECDLCMPDL,20JEBACK2PUSHCXMOVCL,CUR_POSSUBCL,1MOVCUR_POS,CL;每向左移一步,当前位置减1POPCXMOV[DI],BYTEPTR0CALLCLEAR_SCREEN;清屏调用CALLDOU_MONJMPTUICHUBACK2:INCDLCALLCLEAR_SCREEN;清屏调用CALLDOU_MONJMPTUICHUPU:DECDHCMPDH,5JEBACK3PUSHCXMOVCL,CUR_POSSUBCL,18MOVCUR_POS,CLPOPCXMOV[DI],BYTEPTR0CALLCLEAR_SCREEN;清屏调用CALLDOU_MON;重新显示屏幕JMPTUICHUBACK3:INCDHCALLCLEAR_SCREEN;清屏调用CALLDOU_MON;重新显示屏幕JMPTUICHUPD:INCDHCMPDH,16JEBACK4PUSHCXMOVCL,CUR_POSADDCL,18MOVCUR_POS,CLPOPCXMOV[DI],BYTEPTR0CALLCLEAR_SCREEN;清屏调用CALLDOU_MON;重新显示屏幕JMPTUICHUBACK4:DECDHCALLCLEAR_SCREEN;清屏调用CALLDOU_MON;重新显示屏幕TUICHU:RETEATBEANENDPCLEAR_SCREENPROC;清屏函数定义PUSHAXPUSHBXPUSHCXPUSHDXMOVAH,6MOVAL,0MOVBH,7MOVCH,0MOVCL,0MOVDH,24MOVDL,79INT10HPOPDXPOPCXPOPBXPOPAXRETCLEAR_SCREENENDPCHAR_PLAYPROC;显示知道颜色的字符函数MOVAH,9MOVBL,6MOVCX,1INT10HRETCHAR_PLAYENDPCODEENDSENDSTART1.6程序运行过程1.编译:*:在windowsxp系统下运行MASM汇编软件,编译程序,无错误与警告,执行下一步。2.链接:3.执行:(2)所遇到的主要问题和解决方法在课程设计的过程当中遇到的主要问题就是对整个汇编知识不是很熟悉,部分代码不能灵活运用,也有部分代码不能理解,因此在设计过程中花了较多时间查阅书籍跟浏览网上资料;在编写完整个程序后,编译、链接、运行时,当用方向键来控制嘴巴时发现并没有按顺序吃豆子,重新检查程序发现是由于吃豆子程序中位置运算出现了错误,通过调整程序中的“DI”(当前光标位置对应的数组中字符的偏移地址)的值,最终解决了这个问题。再一个就是DOS指令不能灵活运用,导致程序运行过程中纰漏百出,这样也浪费了不少时间,最后通过多次尝试修改,终于完成了整个程序设计。1.7课程设计的感想和心得体会。通过本次汇编语言课程设计,让我更加明白实践的重要性,只有在实践中才能更加理解各种指令的功能。再者,学习理论知识的目的还是要拿来运用,通过实践来巩固所学的理论知识。并且通过这次课程设计实践,让我一改往日的厌学情绪,尤其是当程序运行正确的时候,那种来自内心的成就感,让我更加有信心学好汇编语言了。在这次的课程设计过程中遇到不懂得问题敢于向同学老师提问,在讨论的过程中受益匪浅,更加加深了学习的主动性。如果遇到问题了还坐那里发呆,那肯定完成不了任务。在这个学习设计的过程中使我对于微机汇编这门课有了更深的理解!对于学习汇编语言这门专业课,以后要多看程序,多尝试编写程序,在实践的过程中发现问题,并及时解决问题。1.8参考文献[1]钱小捷等编.《微机原理与借口技术》,2008年1月,第4期第1版,机械工业出版社[2]宋彩莉等编.《汇编语言程序设计学习指导》,2007年出版,西安交通大学版[3]沈美明等编.《IBM-PC汇编语言程序设计》,2008年第1版,清华大学出版社[4]求伯君等编.《新编深入DOS编程》,1994年6月版,学苑出版社二:硬件课程设计电子秒表2.1硬件设计目的让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法2.2硬件设计内容电子秒表:设计一个可任意启动/停止的电子秒表,要求用6位LED数码显示,计时单位为1/100秒。利用功能键进行启/停控制。其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时。利用8086类型2中断(即外部引入不可屏蔽中断),可用开关控制实现:暂停,复位;清零;保存数据功能。2.3硬件设计要求同组同学要发扬团队协作精神,积极主动的提出问题、解决问题、讨论问题,互相帮助和启发。在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。在老师的指导下制定好自己各环节的详细设计进程计划,按给定的时间计划保质保量的完成个阶段的设计任务。设计中可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。硬件设计电路2.5硬件程序代码a1equ0000hb1equ0002hc1equ0004hctr1equ0006ha2equ0200hctr2equ0206ha3equ0100hdatasegmenttabdb3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71Hbufdb0,0,0,0buf1db0,0,0,0,0,0,0,0buf2db0,0;前为第一开关次数buf3db80dup(?)dataendscodesegment'code'assumeds:data,cs:codestart:movax,data movds,ax;中段入口地址设置 movax,0 moves,ax movdi,08 movax,offsetintr_key cld stosw movax,segintr_key stosw movax,datamoves,ax;8255写入控制字moval,10001001bmovdx,ctr1outdx,aln3: calljishu jmpn3n2:leasi,buf2movbh,00hmovbl,1h[si] leadi,buf3 adddi,bx addbl,8 mov1h[si],blleasi,buf1 cld movcx,8 repmovsb n4: calldisjmpn4n5:leasi,buf2movbh,00hmovbl,1h[si] cmpbl,0 jzn1leadi,buf1 subbl,8 mov1h[si],bl leasi,buf3 addsi,bxcld movcx,8 repmovsbn6: calldis jmpn6n1:callqinlinjmpn1 ;jmpstart jishuprocnear;计数子程序leasi,bufmovbl,[si] cmpbl,100 jnzs6s1:movbl,0 mov[si],bl movah,1h[si] cmpah,59 jzs2 incah mov1h[si],ah jmps6 s2:movah,0 mov1h[si],ah movah,2h[si]cmpah,59 jzS4 incah mov2h[si],ah jmps6s4:movah,0 mov2h[si],ah movah,3h[si] cmpah,23 jzs6 incah mov3h[si],ahs6:callchu movcx,3 s5:calldisloops5 calldelay1s incbyteptr[si] retjishuendpchuproc ;rukoual ;数处理子程序 pushsi pushbx movbl,4 leadi,buf1 leasi,bufnext:lodsb movah,00 movcl,10divcl xchgah,alstosb moval,ah stosb decbl jnznext popbx popsi retchuendp disprocnear;显示buf1中的值 pushbx pushcxleabx,tab leadi,buf1 movcx,8 movah,7Fhloop1:moval,[di] xlat movdx,a1 outdx,al movdx,b1 moval,ah outdx,al movbh,1 calldelay callqp leabx,tab rorah,1 incdi looploop1 popcx popbx retdisendpdelay1sprocnear;8253延时子程序 pushdx pushax movdx,ctr2;8253kongzimoval,00110000boutdx,almovdx,a2moval,01houtdx,almoval,00h outdx,al movdx,a3M1:inal,dx testal,01h jzM1 popax popdxretdelay1sendpqpprocnear;清频子程序moval,0ffh movdx,b1 outdx,al retqpendpdelayPROCNEAR;内部延时之程序PUSHbxPUSHCXwait0:MOVCX,06hwait1:LOOPwait1DECbhJNZwait0POPCXPOPbxRETdelayENDP intr_keyprocnear;中断服务子程序callkeytestal,2h jzn1 testal,4h jzn5 leadi,buf2 movbh,[di] incbh mov[di],bh testbh,1h jnzn2 jmpn3 iret in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省淮安市-重点中学2026年初三下第二次月考英语试题含解析
- 河北省石家庄二十二中学重点班达标名校2026届初三4月仿真训练语文试题试卷含解析
- 重庆市万州三中学2026年初三(下)月考试卷(二)英语试题含解析
- 浙江省绍兴市迪荡新区重点中学2026届下学期初三期末检测试题考试语文试题含解析
- 浙江省金华市兰溪二中学2026届初三高中英语试题竞赛模拟(二)英语试题含解析
- 挖机合伙合同范本
- 口腔护理效果评估指南
- 2026年房建工程盘扣式外脚手架施工方案设计
- 2026年寒暑假学生社会实践作业设计方案
- 2026年室内设计大学生终身学习理念与职业续航规划
- QCSG1204009-2015电力监控系统安全防护技术规范
- 2024年辽宁大连中远海运川崎船舶工程有限公司招聘笔试参考题库含答案解析
- 【电动汽车车架设计10000字(论文)】
- 《焦炉煤气脱硫废液干法制酸技术规范》
- 统编版语文四年级下册第四单元教材解读解读与集体备课课件
- 六七十岁老人的回忆录 70岁的回忆录(5篇)
- 学校维修改造工程投标方案(完整技术标)
- 海洋海洋空间资源与国家安全
- 电路分析基础-河南理工大学中国大学mooc课后章节答案期末考试题库2023年
- 《尊重文化多样性》说课 课件
- YY/T 1173-2010聚合酶链反应分析仪
评论
0/150
提交评论