打字计时练习.docx

上传人:b****8 文档编号:30500803 上传时间:2023-08-16 格式:DOCX 页数:27 大小:163.63KB
下载 相关 举报
打字计时练习.docx_第1页
第1页 / 共27页
打字计时练习.docx_第2页
第2页 / 共27页
打字计时练习.docx_第3页
第3页 / 共27页
打字计时练习.docx_第4页
第4页 / 共27页
打字计时练习.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

打字计时练习.docx

《打字计时练习.docx》由会员分享,可在线阅读,更多相关《打字计时练习.docx(27页珍藏版)》请在冰豆网上搜索。

打字计时练习.docx

打字计时练习

 

学生课程设计(论文)

题目:

打字计时练习

******

学号:

************

所在院(系):

计算机学院

专业:

计算机科学与技术

班级:

计算机科学与技术

(1)班

*******

 

2011年12月31日

 

攀枝花学院本科学生课程设计任务书

题 目

打字计时练习

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

对前人工作有改进或突破,或有独特见解。

成绩

指导教师评语

 

指导教师签名:

年 月 日

 

摘要

微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与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命令窗口

2)进入masm程序的安装目录,汇编源文件,如图:

图4.1.2汇编程序

3)连接程序,并查看生成可执行文件wordtest.exe。

图4.1.3查看生成可执行文件

4)关闭对话框,打开可执行文件wordtest.exe,开始打字计时练习。

4.2运行程序:

1)设置主程序段显示提示信息,程序功能应该实现下图所示:

图4.2.1程序调试

2)调用DISPCHARPROCNEAR显示用户字条,调用DISPTIMEPROCNEAR显示时间,然后输出下一句提示程序应该实现下图所示:

图4.2.2程序调试

3)如此循环多次,当第五个例句输入完成后,再返回第一句继续打字计时。

图4.2.3程序调试

4.3调试中出现的问题

没有注意到要操作的目标数据(内存中的数据)的大小和使用的操作容器(寄存器)的大小没有一致。

另外,对于处理数据的ds:

[bx]方式,如movds:

[bx],dxaddbx,2在循环中应注意bx的递增或递减大小,如果处理字节,比如用dl,循环中就加或减1;如果处理字,比如用dx,就加或减2。

在以后应该留意这个一致性。

在8086上,ss和sp都是16位的,栈所处理数据的最小单位也是16位的,即最小是一个字,栈一次读和一次写,都至少是一个字那么大。

 

5.总结

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。

一个星期个学习过去,我通过查阅书籍,以及在老师的精心指导下,我终于完成了此次设计。

经过这两个星期的学习,我对微机的认识有了很大的提高。

我觉得任何一次课程设计的最终目的不是看我们的设计结果是否符合标准,也不是想方设法证明我们自己多么优秀,更重要的是让我们体验实践的快乐、团结的力

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1