汇编语言程序设计打字练习程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

盐城工学院《汇编语言程序设计》课程设计说明书I汇编语言课程设计报告(2014--2015年度第1学期)专业xxx学生姓名xxxx班级xxx学号xxxx指导教师xxx完成日期xxxxx课题名称:打字计时练习程序盐城工学院《汇编语言程序设计》课程设计说明书II目录1.设计目的与设计要求2.程序流程图...................................................52.1主程序流程图............................................52.2时间计算流程图..........................................62.3正确率计算流程图........................................73.设计关键问题.................................................93.1输入输出................................................93.1.1输出显示信息.......................................93.1.2输入十个字符......................................113.2输入字符串所用时间计算.................................113.3正确率判断.............................................134.调试运行结果分析............................................14参考文献......................................................19附录二打字计时练习程序.................................................................................................................19盐城工学院《汇编语言程序设计》课程设计说明书III一.设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题,解决问题的综合应用能力。设计要求在缓冲区预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。设计思路1.系统总体分析在缓存区预放了一些字母,运行时可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。当一个句子分析完后(回车键作为结束符),屏幕上以min:sec:msec的格式显示出键入字符的时间。在每次打字之前,屏幕上先显示一个例句,然后打字员按照例句,将句中字符通过键盘输入。这个过程共进行五次,当键入一个enter键时,推出打字计时练习程序。在键盘上联系的打字例句及其他地址表,计时单位等预存在DATA数据段中。自编的中断程序Kbint检测按键时产生的中断,并将按键扫描码转换为ASCII码存入缓存区BUFFER(内存中一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符(如英文小写字母,数字及一些字符),其他特殊键(如组合键,双态键,功能键),都未做解释,只做字符码0来处理。在主程序部分保存原有09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后在开断。当键盘中断处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。在显示键入的字符时,还应判断字符是否为回车符。说明一个句子输入完毕,此时调用显示时间的子程序显示打字时间,然后顺序显示一个例句。如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某个功能(如ESC键等)退出程序,结束打字练习。打字时间统计利用自编的计时器中断处理程序Clint来完成。每输入一个例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计盐城工学院《汇编语言程序设计》课程设计说明书IV数单位count中,当count的计数单位为18时,sec计数单位加1,当sec计数值达到60时,min计数单位加1,因为输入一个句子无论如何不会达到小时级,所以hours计数值得调整判断,实际上只起到退出计时器的作用。加入一个显示菜单程序,使得原来的程序具有观赏性;显示时间的子程序disptime分别将各计时单位的二进制数转化为十进制,并以min:sec:msec的形式出来。其中msec是由count中的计数值转化成的。Count*1s/18.2=count*55ms此式中,18.2是计算机系统中产生的一个中断,每秒18.2次。2.主模块框图程序的核心模块是打字计时,通过显示的例句进行打字练习,最后显示打字时间,主题流程图如下:a.建立汇编源程序—通过b.编译为目标文件——d.连接执行文件c.不通过,重新修改(语句错误)e.运行f.不正确,用调试工具调试,重新修改(逻辑错误)g.正确完成盐城工学院《汇编语言程序设计》课程设计说明书52程序流程图2.1主程序流程图、开始定义堆栈段、数据段显示提示信息显示address[si]例句读取系统时间并保存输入字符串,存在buff区movsi,0Si+2Si5?再次读取系统时间计算所用时间,调用时间函数,并显示调用正确率计算函数正确率为10?N结束NNY显示正确率输入的是1?YY盐城工学院《汇编语言程序设计》课程设计说明书6图1主程序流程图主程序的流程图如图1所示:说明:首先定义堆栈段,数据段,代码段等,初始化。显示提示信息提示打字练字的规则,说明如何开始,如何退出等。显示出字符串后,开始读取系统时间并保存。然后输入字符串存到指定的缓冲区。输入结束后,再次读取系统时间,并由两次所读取的时间计算出输入字符串所用的时间并显示。调用正确率计算函数,并显示在屏幕上。看输入字符串对应位正确的个数是不是十个,如果是十个,则继续往下,看输入的是不是退出键1,如果是,则退出。如果不是,则继续下一串字符的练习。如果输入正确的个数不是十个,则返回继续该字符串的练习,指导最后输入的正确个数是十个。2.2时间计算流程图计算时间的流程图如图3所示:说明:第一次读取系统时间后,分和秒分别存在了second和minutes里,第二次读取系统时间后,比较DH里的内容和second里的内容,比较结果是second里的内容比较小,则不用向分借位,直接进行减法运算,并把计算结果转换成ASCII码并在屏幕上显示。如果比较的结果是second里的内容是比较大,则进行减法运算时,要向分借位,所以,将DH寄存器的内容加上60,再与second里的内容进行减法运算,最后把运算结果转化成ASCII码,并显示在屏幕上。盐城工学院《汇编语言程序设计》课程设计说明书7图3时间计算流程图2.3正确率计算流程图正确率显示函数的流程图如图4所示:说明:调用争取率判断子程序,首先保护现场,BX指向字符串ADDRESS[SI]首地址,BX+2,指向第一个要显示的字母,DI指向输入缓冲区的首地址,CX寄存器存入十,控制循环次数。比较[BX]HE[DI]里的内容,即判断显示的和输入的字母是否相同。如果相同,计数寄存器AL内容则加一,BX加一,DI加一,继续下次比较,直到十次循环结束。如果不相同,则计数寄存器AL内容不变,BX加一,DI加一,继续下一次循环,知道十次循环结束。当十次循环结束后,即字符串输入结束后,寄存器AL里的内容就是输入正确的个数,AL高四位是输入DOS的2CH号调用读取系统时间将分和秒分别存在second和minute中DOS的2CH号调用读取系统时间SF=1CMPDH,secondYNDH寄存器内容加60寄存器DH内容—second内容计算结果转化称ASCII码并输出在屏幕上盐城工学院《汇编语言程序设计》课程设计说明书8正确数的十位,低四位是输入正确数的个位,将十位和个位分别转化成ASCII码,并将其存入字符串中,调用DOS的9号功能输出字符串,输出的就是屏幕显示的字符串和输入的十位字符串对应位相同的个数,然后恢复现场。每调用一次正确率判断函数,SI加二,即第一次调用该子程序屏幕上显示的是第一组字符串,第二次调用,当SI大于5时,就退出程序。保护现场BX指向ADDRESS[SI]D首地址DI指向输入缓冲区的首地址BX+2[BX]的内容送入DLCMPDL,[DI]ZF=1?AL+1BX+1,DI+1CX=0?AX高八位置零AX除以10商转化称ASCII码并送入寄存器BH中余数转化称ASCII码并送入寄存器BL中恢复现场YNNY返回盐城工学院《汇编语言程序设计》课程设计说明书9图4正确率显示函数的流程图3.设计关键问题在打字练习汇编语言程序设计中,主要有三个问题,分别为输入和输出问题、输入字符串时间的计算、正确率的判断。3.1输入输出3.1.1输出显示信息输出字符串,主要是利用DOS的9号功能调用。当开始打字练习时,要输出提示信息说明打字练习时的规则,其程序为:messagedb0ah,0dh,'WelcometoWUHANUUIVERSITY,Pleasetype10letters,andyoumustinput10rightwords,thenpressanykeytopracticethenextone'db0ah,0dh,'ifyouwanttoquit,press1',0ah,0dh,'$'leadx,messagemovah,9int21h显示信息输出后,要显示预先存在缓冲区的三组字符串,显示字符串用DOS9号调用,其程序为:str1db0ah,0dh,'wuhanunive'db0dh,0ah,'$'str2db0ah,0dh,'hubeichina'db0ah,0dh,'$'str3db0ah,0dh,'qmpzwmoxid'db0ah,0dh,'$'盐城工学院《汇编语言程序设计》课程设计说明书10addressdwstr1,str2,str3movdx,offsetaddress[si]movah,9int21h只有当输入的字符串中的十个字符全部正确时,则显示进入下一字符串的练习并输出鼓励语,其程序为:etdb0dh,0ah,'Congratulations,Welldone!',0ah,0dh,'$'movdx,offsetetmovah,09hint21h当要显示输入字符串所用的时间以及显示输入字符串个数时,可以采用单个字符的输出,但是为了在屏幕上看起来直观,就把要显示的时间和正确个数的十位和个位分别存在缓冲区,并把缓冲区的内容采用9号调用输出在屏幕上,其程序为:(1)显示输入字符所用的时间的程序timedb2dup(?),'$'movtime[0],ah;输入字符串所用时间的十位送入time[0]movtime[1],al;输入字符串所用时间的个位送入time[1]movdx,offsettime;显示time中的内容movah,9int21h(2)显示输入字符串正确个数的程序为:numdb2dup(?),'$'movnum[0],bh;输入字符串正确个数的十位送入num[0]movnum[1],bl;输入字符串正确个数的个位送入num[1]盐城工学院《汇编语言程序设计》课程设计说明书11movdx,offsetnum;显示num中的内容movah,9int21h3.1.2输入十个字符当屏幕显示出要练习字符串时,就要输入十个字符存到指定的缓冲区中,使用DOS1号功能调用,其功能是输入单个字符,输出参数是AL=输入字符的ASCII码,循环十次,将十个字符存入指定的缓冲区buff中,其程序为:buffdb15dup(?)mo

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功