汇编语言程序设计打字练习程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程设计报告( 2014 -- 2015 年度第1 学期)
课题名称:打字计时练习程序
专业xxx
学生姓名xxxx
班级xxx
学号xxxx
指导教师xxx
完成日期xxxxx
目录
1.设计目的与设计要求
2.程序流程图 (5)
2.1主程序流程图 (5)
2.2时间计算流程图 (6)
2.3正确率计算流程图 (7)
3.设计关键问题 (9)
3.1输入输出 (9)
3.1.1 输出显示信息 (9)
3.1.2 输入十个字符 (11)
3.2 输入字符串所用时间计算 (11)
3.3 正确率判断 (13)
4.调试运行结果分析 (14)
参考文献 (19)
附录二打字计时练习程序 (19)
一.设计目的
本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程
序设计方法,提高分析问题,解决问题的综合应用能力。
设计要求
在缓冲区预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。
设计思路
1.系统总体分析
在缓存区预放了一些字母,运行时可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。当一个句子分析完后(回车键作为结束符),屏幕上以min:sec:msec的格式显示出键入字符的时间。在每次打字之前,屏幕上先显示一个例句,然后打字员按照例句,将句中字符通过键盘输入。这个过程共进行五次,当键入一个enter键时,推出打字计时练习程序。
在键盘上联系的打字例句及其他地址表,计时单位等预存在DATA数据段中。
自编的中断程序Kbint检测按键时产生的中断,并将按键扫描码转换为ASCII码存入缓存区BUFFER(内存中一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符(如英文小写字母,数字及一些字符),其他特殊键(如组合键,双态键,功能键),都未做解释,只做字符码0来处理。在主程序部分保存原有09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后在开断。当键盘中断处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。在显示键入的字符时,还应判断字符是否为回车符。说明一个句子输入完毕,此时调用显示时间的子程序显示打字时间,然后顺序显示一个例句。如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某个功能(如ESC键等)退出程序,结束打字练习。打字时间统计利用自编的计时器中断处理程序Clint来完成。
每输入一个例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计
数单位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.正确完成
2程序流程图2.1主程序流程图、
图1 主程序流程图
主程序的流程图如图1所示:
说明:首先定义堆栈段,数据段,代码段等,初始化。显示提示信息提示打字练字的规则,说明如何开始,如何退出等。显示出字符串后,开始读取系统时间并保存。然后输入字符串存到指定的缓冲区。输入结束后,再次读取系统时间,并由两次所读取的时间计算出输入字符串所用的时间并显示。调用正确率计算函数,并显示在屏幕上。看输入字符串对应位正确的个数是不是十个,如果是十个,则继续往下,看输入的是不是退出键1,如果是,则退出。如果不是,则继续下一串字符的练习。如果输入正确的个数不是十个,则返回继续该字符串的练习,指导最后输入的正确个数是十个。
2.2时间计算流程图
计算时间的流程图如图3所示:
说明:第一次读取系统时间后,分和秒分别存在了second和minutes里,第二次读取系统时间后,比较DH里的内容和second里的内容,比较结果是second里的内容比较小,则不用向分借位,直接进行减法运算,并把计算结果转换成ASCII码并在屏幕上显示。如果比较的结果是second里的内容是比较大,则进行减法运算时,要向分借位,所以,将DH寄存器的内容加上60,再与second 里的内容进行减法运算,最后把运算结果转化成ASCII码,并显示在屏幕上。
图3 时间计算流程图
2.3正确率计算流程图
正确率显示函数的流程图如图4所示:
说明:调用争取率判断子程序,首先保护现场,BX指向字符串ADDRESS[SI]首地址,BX+2,指向第一个要显示的字母,DI指向输入缓冲区的首地址,CX寄存器存入十,控制循环次数。比较[BX]HE [DI]里的内容,即判断显示的和输入的字母是否相同。如果相同,计数寄存器AL内容则加一,BX加一,DI加一,继续下次比较,直到十次循环结束。如果不相同,则计数寄存器AL内容不变,BX 加一,DI加一,继续下一次循环,知道十次循环结束。当十次循环结束后,即字符串输入结束后,寄存器AL里的内容就是输入正确的个数,AL高四位是输入