打字计时练习.docx
《打字计时练习.docx》由会员分享,可在线阅读,更多相关《打字计时练习.docx(27页珍藏版)》请在冰豆网上搜索。
打字计时练习
XX学院
学生课程设计(论文)
题目:
打字计时练习
学生姓名:
XX
学号:
XXXXXXXXXXXXXX
所在院(系):
XXXXXXXXXXXXXXXXXXXXX
专业:
计算机科学与技术
班级:
XX级计算机科学与技术X班
指导教师:
XX
2011年12月31日
XX院教务处制
攀枝花学院本科学生课程设计任务书
题 目
打字计时练习
1、课程设计的目的
通过本课程设计教学所要达到的目的是:
1、培养学生理论联系实际的设计思想,提高学生综合运用汇编语言课程的理论知分析问题、解决问题的能力。
2、通过查找、运用设计资料,完成工程设计所必备的基本训练。
3、使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
设计内容:
设计一个在键盘上练习打字并能统计时间的程序。
设计思路:
在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中,自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区buffer,这个工作和ROM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,如组合键、双态键、功能键等都未作解释,只作为字符码0来处理。
在主程序部分保存原09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。
当键盘中断处理后,主程序中安排指令读取缓冲区中的字符并显示在屏幕上。
在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。
在显示键入的字符时,还应判断字符是否为回车(0DH)。
如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间,然后顺序显示下一个例句。
如果所存放的例句都已显示完,则又从第一个例句开始显示,直至键入某一功能键(如Esc键、Shift键等)退出程序,结束打字练习。
打字时间统计利用自定时器中断处理程序clint来完成。
每输完一例句,计时一次。
在此中断例行程序中,定时器中断的次数记录在计数单元count中,当count计数值为18时,sec计数单元加1,当sec计数值达到60时,min计数单元加1。
因为输入完一个句子无论如何也不会达到小时级,所以对hours计数值的调整判断,实际上只起到退出定时器中断的作用。
显示时间的子程序disptime分别将各遍野单元的二进制数转换为十进制数,并以min:
sec:
msec的形式显示出来。
其中msec是由count记数值转换成的:
count×1秒/18.2=count×55ms
3、主要参考文献
[1]《汇编语言程序设计》,吴向军等,高等教育出版社,2002
[2]《IBM-PC汇编语言及程序设计》(第2版),沈美明等,清华大学出版社,2001
[3]《IBM-PC汇编语言及程序设计实验教程》,沈美明等,清华大学出版社,2001
[4]《汇编语言程序设计》,钱晓捷等,电子工业出版社,2000
[5]《汇编语言程序设计》,张志明等,重庆大学出版社,1997
4、课程设计工作进度计划
时间(天)内容安排
1分析设计准备
3编程调试阶段
1编写课程设计报告
指导教师(签字)
日期
年月日
教研室意见:
年月日
学生(签字):
接受任务时间:
年月日
课程设计(论文)指导教师成绩评定表
题目名称
评分项目
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02
科学实践、调研
7
通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
5
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。
07
计算及计算机应用能力
5
具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名:
年 月 日
目录
摘要5
1.设计概述6
1.1设计任务6
1.2设计要求7
1.3设计目的7
1.4设备环境7
2.设计环境7
2.1Masmforwindow集成实验环境介绍7
2.2DOS中断介绍8
3.软件设计概述...............................................................................................................................10
3.1软件设计思想....................................................................................................................10
3.2程序流程图........................................................................................................................10
3.3源程序12
4、调试与运行21
4.1实验步骤:
21
4.2运行程序:
22
4.3调试中出现的问题24
5.总结...............................................................................................................................................25
参考文献26
摘要
微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确的结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。
本设计是利用Masmforwindow集成实验环境来实现的打字练习计时程序,在程序中利用自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。
另外加入一个菜单模块,增加了程序的观赏性。
关键词打字计时,寄存器,缓冲区,中断向量
1.设计概述
1.1设计任务
设计一个在键盘上练习打字并能统计时间的程序。
通过它练习英文打字练习,并能够统计时间。
屏幕上显示出提示信息和练习例句,按照例句从键盘上输入字母即可,每输入完一行后按回车键,可显示出练习输入的时间和下一行例句。
按Esc键可退出程序。
1.2设计要求
在本系统中,要求所需执行的操作由相应的开关状态反映,其驾驶操作与灯光信号对应关系如下:
。
1)自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;
2)在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;
3)每输入完一行按回车键后,可显示出练习输入的时间。
1.3设计目的
熟悉与掌握有关键盘和时间的中断及字符显示技术。
1.4设备环境
在本设计中,所用到的设备环境如下所示:
A.计算机一台;
B.2.设计环境
C.Masmforwindow集成实验环境;
2.设计环境
2.1Masmforwindow集成实验环境介绍
MasmforWindows集成实验环境是从事一线教学的大学教师针对汇编语言初学者的特点开发的一个简单易用的汇编语言的学习软件,它具有错误信息自动定位、关键字实时帮助(动画演示汇编指令执行过程)、语法着色、无限的撤消与恢复、WORD式的查找、替换、定位、支持中文长文件名、软件可以安装在任意文件夹等功能;
a.建立汇编源程序─通过───→b.编译为目标文件─ ↓┬─→d.连接为可执行文件
↑
│ c.不通过,重新修改(语句错误) ↓
├──────────────────────┘ ↓
↑ f.不正确,用调试工具调试,重新修改(逻辑错误) ↓
└──────────────────────────←e运行
↓
正确g.完成
2.2DOS中断介绍
使用DOS提供的程序控制硬件。
优点是兼容性好,使用方便。
DOS是IBMPC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续提供几乎所有的DOS功能调用)负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。
DOS的功能调用不依赖于具体的硬件系统。
所有的DOS系统功能调用都是利用软件中断指令INT21H来实现的。
也就是说,在程序中需要调用DOS功能的时候,只要使用一条INT21H指令即可。
INT21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为四类:
设备管理、目录管理、文件管理和其他。
其功能一览表可参见附录。
为了方便用户使用这些子功能,INT21H对每一个子功能都进行了编号——称为功能号。
这样,用户就能通过指定功能号来调用INT21H的不同子功能。
DOS系统功能调用的方法如下:
1)AH->功能号。
2)在其他寄存器中放入该功能所要求的人口参数。
3)在执行INT21H指令。
4)分析出口参数。
用户程序与DOS、BIOS和硬件的关系见图
3.软件设计方案
3.1软件设计思想
在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中。
自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。
在主程序部分保存原有09类型的中段向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。
当键盘中断处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。
在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。
在显示键入的字符时,还应判断字符是否为回车符(0DH)。
如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间,然后顺序显示一个例句。
如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某一个功能(如Esc键、Shift键等)退出程序,结束打字练习。
打字时间统计利用自编的定时器中断处理程序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次
3.2程序流程图
3.3源程序
stacksegmentparastack'stack'
db256dup(0)
toplabelword
stackends
datasegmentparapublic'data'
bufferdb16hdup(0)
bufpt1dw0
bufpt2dw0
kbflagdb0
promptdb'*pleasepractisetyping*',0dh,0ah,'$'
scantabdb0,0,'1234567890-=',8,0
db'qwertyuiop[]',0dh,0
db'asdfghjkl;',0,0,0,0
db'zxcvbnm,./',0,0,0
db'',0,0,0,0,0,0,0,0,0,0,0,0,0
db'789-456+1230.'
even
oldcs9dw?
oldip9dw?
str1db'abcdefghijklmnopqrstuvwxyz.'
db0dh,0ah,'$'
str2db'therearesomenewspapersonthetable.'
db0dh,0ah,'$'
str3db'therearesomecloudsinthesky.'
db0dh,0ah,'$'
str4db'shealwayseatsherlunchatnoon.'
db0dh,0ah,'$'
str5db'idonotlikeautumnandwinter.'
crlfdb0dh,0ah,'$'
colondb':
','$'
even
saddrdwstr1,str2,str3,str4,str5
countdw0
secdw0
mindw0
hoursdw0
save_lcdw2dup(?
)
dataends
codesegment
assumecs:
code,ds:
data,es:
data,ss:
stack
mainprocfar
start:
movax,stack
movss,ax
movsp,offsettop
pushds
subax,ax
pushax
movax,data
movds,ax
moves,ax
;movah,0
;moval,4
;int21h
;movah,0bh
;movbh,0
;movbl,4
;int11h
movah,35h
moval,09h
int21h
movoldcs9,es
movoldip9,bx
pushds
movdx,segkbint
movds,dx
movdx,offsetkbint
moval,09h
movah,25h
int21h
popds
movah,35h
moval,1ch
int21h
movsave_lc,bx
movsave_lc+2,es
pushds
movdx,segclint
movds,dx
movdx,offsetclint
moval,1ch
movah,25h
int21h
popds
inal,21h
andal,11111100b
out21h,al
first:
movah,0
moval,3
int10h
movdx,offsetprompt
movah,9
int21h
movsi,0
next:
movdx,saddr[si]
movah,09h
int21h
movcount,0
movsec,0
movmin,0
movhours,0
sti
forever:
callkbget
testkbflag,80h
jnzendint
pushax
calldispchar
popax
cmpal,0dh
jnzforever
moval,0ah
calldispchar
calldisptime
leadx,crlf
movah,09h
int21h
addsi,2
cmpsi,5*2
jnenext
jmpfirst
endint:
cli
pushds
movdx,save_lc
movax,save_lc+2
movds,ax
moval,1ch
movah,25h
int21h
popds
pushds
movdx,oldip9
movax,oldcs9
movds,ax
moval,09h
movah,25h
int21h
popds
sti
ret
mainendp
clintprocnear
pushds
movbx,data
movds,bx
leabx,count
incwordptr[bx]
cmpwordptr[bx],18
jnereturn
callinct
adj:
cmphours,12
jlereturn
subhours,12
return:
popds
sti
iret
clintendp
inctprocnear
movwordptr[bx],0
addbx,2
incwordptr[bx]
cmpwordptr[bx],60
jneexit
callinct
exit:
ret
inctendp
disptimeprocnear
movax,min
callbindec
movbx,0
moval,':
'
movah,0eh
int10h
movax,sec
callbindec
movbx,0
moval,':
'
movah,0eh
int10h
movbx,count
moval,55d
mulbl
callbindec
ret
disptimeendp
bindecprocnear
movcx,100d
calldecdiv
movcx,10d
calldecdiv
movcx,1
calldecdiv
ret
bindecendp
decdivprocnear
movdx,0
divcx
movbx,0
addal,30h
movah,0eh
int10h
movax,dx
ret
decdivendp
kbgetprocnear
pushbx
cli
movbx,bufpt1
cmpbx,bufpt2
jnzkbget2
cmpkbflag,0
jnzkbget3
sti
popbx
jmpkbget
kbget2:
moval,[buffer+bx]
incbx
cmpbx,16h
jckbget3
movbx,0
kbget3:
movbufpt1,bx
popbx
ret
kbgetendp
kbintprocnear
pushbx
pushax
inal,60h
pushax
inal,61h
oral,80h
out61h,al
andal,7fh
out61h,al
popax
testal,80h
jnzkbint2
movbx,offsetscantab
xlatscantab
cmpal,0
jnzkbint4
movkbflag,80h
jmpkbint2
kbint4:
movbx,bufpt2
mov[buffer+bx],al
incbx
cmpbx,16h
jckbint3
movbx,0
kbint3:
cmpbx,bufpt1
jzkbint2
movbufpt2,bx
kbint2:
cli
moval,20h
out20h,al
popax
popbx
sti
iret
kbintendp
dispcharprocnear
pushbx
movbx,0
movah,0eh
int10h
popbx
ret
dispcharendp
codeends
endstart
4、调试与运行
4.1实验步骤:
1)打开windows命令窗口
1)进入masm程序的安装目录,汇编源文件,如图:
图4.1.2汇编程序
2)连接程序,并查看生成可执行文件wordtest.exe。
图4.1.3查看生成可执行文件
3)关闭对话框,打开可执行文件wordtest.exe,开始打字计时练习。
4.2运行程序:
1)设置主程序段显示提示信息,程序功能应该实现下图所示:
图4.2.1程序调试
2)调用DISPCHARPROCNEAR显示用户字条,调用DISPTIMEPROCNEAR显示时间,然后输出下一句提示程序应该实现