文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言程序设计打字练习程序

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

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

汇编语言课程设计报告

( 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高四位是输入正确数的十位,低四位是输入正确数的个位,将十位和个位分别转化成ASCII

码,并将其存入字符串中,调用DOS的9号功能输出字符串,输出的就是屏幕显示的字符串和输入的十位字符串对应位相同的个数,然后恢复现场。每调用一次正确率判断函数,SI加二,即第一次调用该子程序屏幕上显示的是第一组字符串,第二次调用,当SI大于5时,就退出程序。

图4 正确率显示函数的流程图

3.设计关键问题

在打字练习汇编语言程序设计中,主要有三个问题,分别为输入和输出问题、输入字符串时间的计算、正确率的判断。

3.1输入输出

3.1.1 输出显示信息

输出字符串,主要是利用DOS的9号功能调用。

当开始打字练习时,要输出提示信息说明打字练习时的规则,其程序为:message db 0ah,0dh, 'Welcome to WUHAN UUIVERSITY, Please type 10

letters, and you must input 10 right words, then press any key to

practice the next one '

db 0ah,0dh, 'if you want to quit, press 1 ',0ah,0dh,'$'

lea dx,message

mov ah,9

int 21h

显示信息输出后,要显示预先存在缓冲区的三组字符串,显示字符串用DOS9号调用,其程序为:

str1 db 0ah,0dh,'wuhanunive'

db 0dh,0ah,'$'

str2 db 0ah,0dh,'hubeichina'

db 0ah,0dh,'$'

str3 db 0ah,0dh,'qmpzwmoxid'

db 0ah,0dh,'$'

address dw str1,str2,str3

mov dx,offset address[si]

mov ah,9

int 21h

只有当输入的字符串中的十个字符全部正确时,则显示进入下一字符串的练习并输出鼓励语,其程序为:

et db 0dh,0ah,'Congratulations, Well done!',0ah,0dh,'$'

mov dx,offset et

mov ah,09h

int 21h

当要显示输入字符串所用的时间以及显示输入字符串个数时,可以采用单个字符的输出,但是为了在屏幕上看起来直观,就把要显示的时间和正确个数的十位和个位分别存在缓冲区,并把缓冲区的内容采用9号调用输出在屏幕上,其程序为:

(1)显示输入字符所用的时间的程序

time db 2 dup(?),'$'

mov time[0],ah;输入字符串所用时间的十位送入time[0]

mov time[1],al;输入字符串所用时间的个位送入time[1]

mov dx,offset time;显示time中的内容

mov ah,9

int 21h

(2) 显示输入字符串正确个数的程序为:

num db 2 dup(?),'$'

mov num[0],bh ;输入字符串正确个数的十位送入num[0]

mov num[1],bl;输入字符串正确个数的个位送入num[1]

mov dx,offset num;显示num中的内容

相关文档