实训报告书实训名称:打字游戏系(部):专业班级:学生姓名:学号:指导教师:完成日期:实训课题打字游戏实训人姓名同组人员实训日期实训成绩指导教师评语指导教师签名:_____________________年____月____日课程实训报告书1目录1实训目的.................................................................................................22打字游戏系统的设计与分析..............................................................22.1系统设计与功能的描述............................................................22.2系统模块分析............................................................................32.3系统整体设计方案流程图.........................................................42.4程序流程图................................................................................53主要代码清单.......................................................................................64程序运行与测试................................................................................204.1程序的调试..............................................................................204.2程序中使用的部分重要指令..................................................215实训总结.............................................................................................23……………………………装……………………………………订…………………………………线……………………………课程实训报告书2打字游戏系统的设计与实现1、实训目的《微机原理及应用》实训的教学让学生通过接触客观实际,来了解和认识所学的专业知识,让学生了解和掌握所学知识在客观实际中的应用,通过实训课可以使学生了解解决实际问题的过程,并能亲自动手完成相关题目设计。让学生对实际课题设计的过程和方法有个很好的认识,又能亲自动手来锻炼提高专业技能,把所学的理论知识与实际能力紧密的结合在一起。在进行实训的同时,教师应培养学生具有初步的科研意识,培养学生查找资料、运用设计资料,完成工程问题的能力,为后继课程的学习打下坚实的基础。本次课程设计的目的主要是将课堂上所学的知识学以致用,通过程序的制作过程学习课外的新知识,并加强加深对旧知识的理解与掌握,最终使学生达到以下三点:1.使学生增进对汇编语言的认识,加强用汇编语言编程的能力。2.使学生了解和掌握汇编语言程序设计过程、方法及其实现,为以后微机原理课程的深入学习打下良好基础。3.使学生进一步掌握屏幕输出显示的设计方法。2、打字游戏系统的设计2.1系统功能的描述运行该程序,首先进入游戏主功能界面,在该界面如果按“Enter”键会进入游戏主界面,如果按“E”字母键会退出程序。进入程序主界面,会有随机字母落下,如果击中正确字母会在下方的“hit:”那里显示您击中的次数,如果没击中或者击中的是错误的字母,则会在下方的“lost:”显示未击中的次数。您还可以按“Space”键暂停游戏,按“ESC”键返回游戏主功能菜单,从另选择功能项。当您未击中的次数等于9次时,游戏结束,进入游戏结束页面,在该页面中您还可以按“ESC”键返回游戏主功能菜单,开始新一轮的游戏或退出。2.2系统模块分析:该打字游戏系统主要分为一下几大模块:清屏宏定义模块,菜单显示宏定义模块,数据块定义模块,栈定义模块,主代码段模块。课程实训报告书3清屏宏定义模块:用于当前页面跳转下一页面清除上一页面的内容,以便正常显示该页面内容。菜单显示宏定义模块:用于显示实现游戏主功能页面中几项主要功能。数据块定义模块:程序中所有的变量或者常量全都在此模块中定义。栈定义模块:指定段的名称和范围。主代码段模块:在所有代码段中该代码段最重要也最长,它容扩了所有上面的代码段并实现了他们的功能,其他还有:定义初始字符位置,宏定义模块的调用,设置光标位置,输入字符,计算击中和未击中的次数,字母下落循环,击中字符消失,当击中次数大于9时进位,出现下一个字符的算法,和返回DOS状态等等。课程实训报告书42.3系统整体设计方案流程图开始欢迎界面结束进入游戏界面游戏运行游戏结束ESCEENTER输入字母并进行相关操作后返回图2.1课程实训报告书52.4程序流程图开始游戏主功能界面键盘输入::是否E是否Enter开始游戏字母随机落下检查键盘是否Space输入字符正确结束下落字母消失,hit加1暂停游戏Lost加1Lost等于九进入游戏结束界面课程实训报告书63、主要的清单代码;;;清屏宏定义clear_screenMACROop1,op2,op3,op4MOVAH,06hMOVAL,00hMOVBH,07hMOVCH,op1MOVCL,op2MOVDH,op3MOVDL,op4INT10hMOVAH,02hMOVBH,00hMOVDH,00hMOVDL,00hINT10hENDM;;;菜单显示宏定义menuMACROop1,op2,op3MOVAH,02hMOVBH,00hMOVDH,op1MOVDL,op2INT10hMOVAH,09hLEADX,op3INT21hENDM;;;定义数据段课程实训报告书7dataSEGMENTnoDB2010/6/24$ZKDBTypingGame,Comeon!!!$megDBPress[Enter]keytocontinue.......$meg1DBPress[space]keytopause!$meg2DBPress[ESC]keytoreturnmaininterface!$meg3DBPressletter[E]toexit!$meg4DBSuyu,Sunchuanyan$meg5DBlost:$meg6DBGameOver!!!$meg7DBHit:$meg8DB(Becauseyouhavelost9times)$speedDW6000d;定义下落的速度hittimelDB0$;显示击中数的个位hittimehDB0$;显示击中数的十位countDB0;定义未击中的个数lettersDBQWERTYUIOPASDFGHJKLZXCVBNMDBMNBVCXZLKJHGFDSAPOIUYTREWQDBLKJHGFDSAMNBVCXZOIUYTREWQP;定义下落字符串letters_bakDBTREWQGFDSABVCXZYUIOPHJKLNMDBPLMOKNIJHBYGVTFCRDXESZWAQDBZXCVMNBLKJHGASDFPOIUYTQWERletter_counterDB0life_flagDB78DUP(0)position_flagDB78DUP(0);定义光标位置present_positionDB1dataENDS;;;定义堆栈段stackSEGMENTparastack'stack'课程实训报告书8DB64DUP(0)stackENDS;;;代码段codeSEGMENTmainPROCFARASSUMECS:code,DS:data,SS:stackstart:MOVAX,dataMOVDS,AXMOVletter_counter,00hMOVpresent_position,1LEASI,position_flag;取有效地址MOVAH,00hMOVCX,00hinit_postion_flag:;定义光标位置MOV[SI],AHINCSIINCCXCMPCX,78dJNEinit_postion_flagLEADI,lettersLEASI,letters_bakMOVCX,00hinit_letters:;定义初始字符位置MOVAH,[SI]MOV[DI],AHINCSIINCDIINCCXCMPCX,78d课程实训报告书9JNEinit_lettersMOVAH,00hLEASI,life_flagMOVCX,00h;;;进入打字游戏主界面init_life_flag:MOV[SI],AHINCSIINCCXCMPCX,78dJNEinit_life_flagMOVCX,00hMOVAH,01hORCH,00010000bINT10hclear_screen00d,00d,24d,79dmenu05d,15d,ZKmenu17d,55d,nomenu19d,52d,meg4;菜单信息的宏调用menu07d,15d,megmenu09d,15d,meg1menu11d,15d,meg2menu13d,15d,meg3;;;设置光标位置put:MOVAH,02hMOVBH,00hMOVDH,22dMOVDL,33dINT10h课程实训报告书10MOVAH,01h;盘输入任意字符INT21hCMPAL,0dhJEspeed3CMPAL,45hJEexit;;;退出程序exit:MOVAH,4chINT21h;;;速度speed3:MOVAX,speed+12MOVspeed,AXJMPbegin;;;进入打字游戏页面begin:clear_screen01d,01d,23d,78dclear_screen01d,01d,23d,78dmenu24d,65d,meg5menu24d,18d,meg7;显示击中和未击中的次数MOVAH,02hMOVBH,00hMOVDH,01hMOVDL,01hINT10hMOVCX,00hLEASI,letters;;;显示下一个下落字符nextletter:课程实训报告书11MOVAH,02hMOVDL,[SI]INT21hINCSIINCCXCMPCX,78dJEnextcycleJMPnextletterfrom_front:SUBpresent_position,78dJMPgobackto_sifind_zero:CMPletter_counter,78dJErecycleCMPpresent_position,78dJEfrom_oneMOVAH,00hnextsi:ADDpresent_position,01hINCSICMP[SI],AHJEgobackto_diCMPpresent_position,78dJEfrom_oneJMPnextsifrom_one:MOVpresent_position,01hJMPgobackto_sirecycle:MOVletter_counter,00h课程实训报告书12MOVpresent_position,01dLEASI,position_flagMOVCX,00hMOVAH,00hclearsi:MOV[SI],AHINCCXCMPCX,78dJEnextcycleINCSIJMPclearsinextcycle:LEADI,lettersLEASI,position_flagADDpresent_position,31dCMPpresent_position,78JAfrom_frontgobackto_si:AD