题目打字练习1、课程设计的目的1、使同学们增进对汇编语言的认识,加强用汇编语言编程的能力。2、通过查找、运用设计资料,完成工程设计所必备的基本训练。3、使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)设计内容:编程实现如下功能:将26个字母中的任一字母从屏幕落下,用户要在这个过程中键入落下的字母,如果键入正确,字母消失;键入不正确,字母继续下落。按下列要求设计主菜单:按回车键进入打字练习;按Esc键返回主界面;按空格键暂停;按大写字母“E”程序结束。设计思路:循环调用BIOS的10H中断类型的09号功能,显示一个有提示信息的开始界面。调用DOS系统功能调用的1号功能,接受从键盘输入的字符到AL寄存器,如果(AL)为空格,进入打字练习界面;如果(AL)为“E”,则退出程序。在界面的第0行显示由26个字母组成的字符串。字母下落的设计过程是:(1)利用BIOS功能调用的2号功能,置光标位置。(2)10号功能在光标位置写字母。(3)延迟一段时间。(4)重置光标位置(列坐标不变,改变行坐标),利用10号功能在光标位置写空格,延迟一段时间。(5)重复(1)~(4)。打字练习的实现过程是:当字母下落没有超过最大行坐标时,利用DOS系统功能调用的6号功能,接受从键盘输入的字符到AL寄存器。如果(AL)为1BH(Esc),则转向主界面显示的程序段;如果(AL)为空格,则字母在确定光标位置显示,延迟一段时间,直到(AL)再次为空合格;如果(AL)为任意字母,则判断其是否和下落字母相同,如果相同,则在相应光标位置显示空合格;否则,字母继续下落。重复以上过程。操作说明:运行可执行程序testword.exe,出现菜单主界面,按空格键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;否则,字母继续下落。按Esc键返回主菜单;按空格键暂停;按“E”退出。3、主要参考文献[1]《汇编语言程序设计》,吴向军等,高等教育出版社,2002[2]《IBM-PC汇编语言及程序设计实验教程》,沈美明等,清华大学出版社,2001[3]《汇编语言程序设计》,钱晓捷等,电子工业出版社,2000[4]《汇编语言程序设计案例精编》,李珍香等,中国水利水电出版社,2004[5]《汇编语言程序设计》,白小明,中国铁道出版社,2009-8-1[6]《汇编语言程序设计》,王成耀,姚琳,机械工业出版社,2003-03-01----打字练习-1-摘要微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微机计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体的概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。本设计是利用Masmforwindow集成实验环境来实现得打字练习程序,当前,在计算机和许多手机上流行许多小游戏,小软件,应用都很广泛,比如本次编写的练习打字小程序就很有趣,不仅让我们学习打字,更加重要的是我们在编写的过程中更好的掌握学过的知识,锻炼了我们的编程技能。通过运用汇编语言中有的循环,子程序调用等来完成程序的编写,并且通过对程序的调试,逐步的掌握汇编语言的功能,在自己不足的方面进行改正,进一步的巩固所学的知识,熟练应用汇编语言进行一些程序的制作,进一步培养了对编程的兴趣关键词课程设计,软件调试,打字练习,编程----打字练习-2-1设计内容简介1.1设计任务设计主菜单:按回车键进入打字练习;按ESC键进入延缓界面;按空格键暂停;按大写字母“E”程序结束。将两位十进制数从屏幕上方落下,用户要在这个过程中键入落下的字母,在下落的过程中键入落下的数字,如果正确,数字消失;键入不正确,数字继续下落。若键入正确,则得分,没有键入正确,不扣分。在打字的过程中,每下落十个数记一次总成绩。1.2设计思想用汇编语言实现打字程序的思想,首先用BIOS的10H中断类型的02H功能置光标位置,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的21H的08H功能,接受从键盘输入的字符到AL寄存器,判断AL如果为回车以默认速度开始游戏,如为S键则进入速度选择界面,如为E键则退出程序;进入速度选择界面后,调用DOS的21H的08H功能,选择速度后进入游戏;进入游戏后,随机落下一字母,通过21H的06H功能调用,接受从键盘输入的字符到AL寄存器,如键入ESC进入成绩界面,如键入空格则暂停游戏,如没有得到输入或输入错误则继续下落,输入正确则字母消失,并通过21H的02H功能调用发生响铃;接着继续下落其他字母,如果落下的字母数大于78个则退出游戏进入成绩界面。进入成绩界面后通过DOS的21H的02H功能调用显示击中字母的个数和丢失字母的个数,暂停大概2秒钟后自动回到主界面。1.3设备环境16位Windows2000操作系统,文本编辑器使用写字板,汇编程序使用MASM.EXE,连接程序使用LINK.EXE,调试程序使用DEBUG.EXE。1.4知识点运用Windows2000操作系统、写字板、汇编程序等的基本使用规则;调用BIOS的1号功能、2号功能、6号功能、09号功能、10号功能等;汇编语言中,循环语句、判断语句的使用和嵌套;文本的建立,程序链接的方法;绘图和屏幕截图的方法;DEBUG调试程序。----打字练习-3-2程序流程设计主要流程图图2.1打字练习程序流程图开始清屏,显示开始界面按空格键进入打字练习界面光标初始化在第一行显示由26个字母组成的字符串任一字母下落键入字符输入字母正确吗?消去字母字符为空格键吗?字符为Esc键吗?字母暂停键入任意字符返回主界面输入“E”结束----打字练习-4-3程序代码设计Init_gamemacroop1,op2,op3,op4,op5,op6movcx,00hmovdh,op1movdl,op2op6:movah,02hmovbh,00hint10hpushcxmovah,0ahmoval,op3movbh,00hmovcx,01hint10hpopcxinccxincop4cmpcx,op5jneop6endmclear_screenmacroop1,op2,op3,op4;本段程序主要是通过定义变量和调用实现清屏宏定义movah,06hmoval,00hmovbh,07hmovch,op1movcl,op2movdh,op3movdl,op4int10hmovah,02hmovbh,00hmovdh,00h----打字练习-5-movdl,00hint10hendmmenumacroop1,op2,op3;本段程序主要是通过定义变量和调用来实现菜单显示宏定义movah,02hmovbh,00hmovdh,op1movdl,op2int10hmovah,09hleadx,op3int21hendmdatasegmentZKdbWELCOMETOPLAY$nodbdate:2010-12-31$megdbpressEnterkeytocontinue.......$meg1dbwhenaletterisdropping,pleasehitit!$meg2dbpressspacekeytopause!$meg3dbpressESCkeytoreturnmaininterface!$meg4dbpressletter'E'toexit!$speeddw600dlettersdbjwmilzoeucgpravskntxhdyqfbdbiytpkwnxlsvxrmofzhgaebudjqdbnwimzoexrphysfqtvdcgljukdaletters_bakdbjwmilzoeucgpravskntxhdyqfbdbiytpkwnxlsvxrmofzhgaebudjqdbnwimzoexrphysfqtvdcgljukdaletter_counterdb0life_flagdb78dup(0)position_flagdb78dup(0)present_positiondb1----打字练习-6-dataends;本段主要用于主界面的显示,起到提示作用stacksegmentparastack'stack'db64dup(0)stackendscodesegmentmainprocfarassumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovletter_counter,00hmovpresent_position,1leasi,position_flagmovah,00hmovcx,00hinit_postion_flag:mov[si],ahincsiinccxcmpcx,78djneinit_postion_flagleadi,lettersleasi,letters_bakmovcx,00hinit_letters:movah,[si]mov[di],ahincsiincdiinccxcmpcx,78djneinit_letters----打字练习-7-movah,00hleasi,life_flagmovcx,00hinit_life_flag:mov[si],ahincsiinccxcmpcx,78djneinit_life_flagmovcx,00hmovah,01horch,00010000bint10hclear_screen00d,00d,24d,79dInit_game00d,00d,0ah,dl,80d,nextsign1Init_game24d,00d,0ah,dl,80d,nextsign2Init_game00d,00d,0ah,dh,25d,nextsign3Init_game00d,79d,0ah,dh,25d,nextsign4menu05d,15d,ZK;本段程序主要是对菜单信息的宏调用menu07h,15d,nomenu09d,15d,megmenu11d,15d,meg1menu13d,15d,meg2menu15d,15d,meg3menu17d,15d,meg4put:movah,02h;此段用来设置光标位置movbh,00hmovdh,22dmovdl,33dint10h----打字练习-8-movah,01h;通过本段代码,能够从键盘输入任意字符int21hcmpal,0dhjespeed3cmpal,45hjeexitexit:movah,4chint21hspeed3:movax,speed+12movspeed,axjmpbeginbegin:clear_screen01d,01d,23d,78d;第二次使用清屏宏调用clear_screen01d,01d,23d,78dInit_game23d,01d,01h,dl,78d,nextsign5movah,02hmovbh,00hmovdh,01hmovdl,01hint10hmovcx,00hleasi,lettersnextletter:movah,02h;用来示字母movdl,[si]int21hincsiinccxcmpcx,78djenextcycle----打字练习-9-jmpextletterfrom_front:subpresent_position,78djmpgobackto_sifind_zero:cmpletter_counter,78djerecyclecmppresent_position,78djefrom_onemovah,00hnextsi:addpresent_position,01hincsicmp[si],ahjegobackto_dicmppresent_position,78djefrom_onejmp