微机原理应用打字计时练习.docx

上传人:b****7 文档编号:9341849 上传时间:2023-02-04 格式:DOCX 页数:25 大小:110.06KB
下载 相关 举报
微机原理应用打字计时练习.docx_第1页
第1页 / 共25页
微机原理应用打字计时练习.docx_第2页
第2页 / 共25页
微机原理应用打字计时练习.docx_第3页
第3页 / 共25页
微机原理应用打字计时练习.docx_第4页
第4页 / 共25页
微机原理应用打字计时练习.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

微机原理应用打字计时练习.docx

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

微机原理应用打字计时练习.docx

微机原理应用打字计时练习

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

实践教学

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

 

兰州理工大学

2011年春季学期

 

微机原理应用课程设计

 

题目:

打字计时练习

专业班级:

姓名:

学号:

指导教师:

成绩:

 

摘要

本设计为打字计时系统,其主要分为五部分,第部分为设计概述,主要介绍设计的任务、目标,以及设计所用设备器材,第二部分为软件设计环境与DOS,主要是介绍软件设计环境,以及DOS资料的介绍。

并且在此之上画出了原理框图。

第三部分为软件设计,其主要介绍本设计中采用何种软件设计方案及相关的流程图,在流程图的基础上,写出本系统的程序。

第四部分为调试及运行结果,它是在完成软件设计的基础之上,对本系统进行测试,看是否满足题目要求,最后以表格的方式对测试的结果给予反应,直接明了。

第五部分为设计心得总结,主要是介绍在经过本次设计后,自己的一些心得体会。

最后还给出了本设计的一些参考文献。

关键词:

打字计时,时间的中断,字符显示

 

前言

微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确的结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。

本设计是利用Masmforwindow集成实验环境来实现的打字练习计时程序,在程序中利用自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。

另外加入一个菜单模块,增加了程序的观赏性。

本次课程设计由某某完成。

其中主要负责软件方案及程序设计,主要负责协调测试,是负责寻找资料与文档的编写

 

目录

1、设计任务5

2、设计要求5

3、设计目的5

4、软件设计思想6

5、程序流程图7

6、程序代码12

7、调试及运行结果26

8、课程设计心得27

9、设计的主要参考文献28

 

正文

1、设计任务

设计一个在键盘上练习打字并能统计时间的程序。

2、设计要求

1、自行编写键盘中断和时间中断处理程序,并保存原中断向量。

程序运行时,使用自编的中断向量处理程序。

程序退出时,恢复中断向量。

2、查阅文献资料,一般在5篇以上;

3、完成算法设计和程序设计、调试;

4、撰写课程设计说明书;

5、做好答辩工作。

3、设计目的

1、熟悉和掌握有关键盘和时间的中断;

2、掌握字符显示技术;

3、熟悉汇编语言程序的编译、链接过程;

 

4、软件设计思想

在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中。

自编中断程序检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓冲区。

主程序部分保存原来的09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后打开中断。

当键盘中断处理后,主程序中安排指令读取缓冲区中的字符显示在屏幕上。

主程序末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。

打字时间统计利用自编的定时器中断处理程序,每输完一个例句,计时一次。

在此中断例行程序中,定时器中断的次数记录在计数单元count中,当count计数值为18时,sec计数单元加1,当sec计数值达到60时,min计数单元加1。

因为输入完一个句子无论如何也不会达到小时级,所以对hours计数值的调整判断,实际只起到退出定时器中断的作用。

显示时间的子程序分别将各计时单元的二进制数转换为十进制数,并以min:

sec:

msec的形式显示出来。

其中msec是由count中的计数值转换成的:

count×1s/18.2=count×55ms,该式中,18.2是计算机系统产生的一个时间中断,每秒18.2次。

 

5、程序流程图

5.1系统结构图

 

5.2各模块说明

存放字符的数据段模块:

主要存放显示字符的数据段,以字符形式存储输入错误个数,以字符形式存储打字用时,同时包括堆栈段。

主程序:

程序的主体,通过执行函数调用各个模块,是整个程序的核心,同时也是函数正常运行的枢纽。

输入模块:

测试者通过键盘键入内容,同时和存放字符的数据段比较。

计时模块:

将两次调用系统的时间差储存起来。

码变换模块:

计算机输入设备输入的信息一般是由ASCII码和BCD码表示的数据和字符,CPU一般均用二进制数进行计算或其他信息处理,处理结果输出又必须依照外设的要求变为ASCII码、BCD码、七段显示码等。

因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。

在此程序模块中,将ax中的十进制数转换为字符存储在ds:

si指向的存储空间中;显示ds:

si指向的一段以0结尾的字符串;将al中的bcd码转换成十进制存储在al中返回。

显示模块:

测试者获取信息的窗口,计算机通过显示模块将提示信息,打字用时和测试结果呈现在测试者的面前。

执行函数模块:

调用各个分模块,是主程序的执行者。

程序结束模块:

结束程序。

输入模块:

 

计时模块:

 

 

6、程序代码

;********************

;存放字符的数据段*

;********************

datasegment

db"interpret:

movdh,12movdl,2movcl,01101010bcallshow_strcalprompt1callerror_num_dispcallprompt2calltime_dispret",0

dataends

;*************************

;以字符形式存储错误个数*

;*************************

countsegment

db16dup(0)

countends

;*************************

;以字符形式存储打字用时*

;*************************

all_timesegment

db16dup(0)

all_timeends

 

;**************

;堆栈段*

;**************

stacksegment

db512dup(0)

stackends

 

;**************

;主程序*

;**************

assumecs:

code

codesegment

start:

movax,data

movds,ax

movsi,0

movax,stack

movss,ax

movsp,512

callinterpret

movax,4c00h

int21h

 

;*******************

;打字模块*

;*******************

print:

pushax

pushbx

pushcx

pushdx

pushsi

movbh,0;在第0页显示

movdh,13;将光标设置为13行

movdl,1;将光标设置为第一列

movcx,1;输出一个字符

movbp,0;用bp计数错误的功能

calltimer;启动计时器

pr_start:

movah,ds:

[si]

cmpah,0

jep_end;遇到0则输入结束

movah,2;设置光标

int10h

movah,0;输入一个数

int16h

cmpal,ds:

[si]

jnewrong

movbl,01101010b;输入正确时的显示颜色

jmppri

wrong:

incbp

movbl,01101100b;输入错误时的显示颜色

pri:

incsi

incdl

movah,9;输出字符

int10h

jmppr_start

p_end:

calltimer

popsi

popdx

popcx

popbx

popax

ret

;********************************

;错误字符个数输出模块*

;********************************

error_num_disp:

pushax

pushcx

pushdx

pushsi

pushbp

pushds

movax,count

movds,ax

movsi,0

movax,bp

calldtoc

movdh,1

movdl,15

movcl,0ach

movsi,0

callshow_str

popds

popbp

popsi

popdx

popcx

popax

ret

;***********************************************

;计时器,将两次调用timer的时间差存储在t中*

;***********************************************

timer:

jmpshortt_start

tdw0

t_start:

pushax

pushbx

moval,2

out70h,al

inal,71h

callbcd_ten

movbl,60

mulbl

movbx,ax

moval,0

out70h,al

inal,71h

callbcd_ten

movah,0

addax,bx

subax,t

movt,ax

popbx

popax

ret

;***************************

;显示时间*

;***************************

time_disp:

pushax

pushcx

pushdx

pushsi

pushds

movax,all_time

movds,ax

movsi,0

movax,t

calldtoc

movdh,3

movdl,12

movcl,0ach

movsi,0

callshow_str

popds

popsi

popdx

popcx

popax

ret

;***********************************************************

;将ax中的十进制数转换为字符存储在ds:

si指向的存储空间中*

;***********************************************************

dtoc:

pushds

pushax

pushcx

pushdx

pushdi

movdi,0

movbx,10

dtoc1:

movdx,0

divbx

movcx,ax

adddx,30h

pushdx

incdi

jcxzdtoc2

jmpdtoc1

dtoc2:

movcx,di

dtoc3:

popdx

movds:

[si],dl

incsi

loopdtoc3

popdi

popdx

popcx

popax

popds

ret

;****************************************

;显示ds:

si指向的一段以0结尾的字符串*

;****************************************

show_str:

pushcx

pushsi

pushax

pushbx

pushes

pushdx

moval,0A0h

decdh

muldh

movbx,ax

moval,2

muldl

subax,2

addbx,ax

movax,0B800h

moves,ax

moval,cl

movch,0

s2:

movcl,ds:

[si]

jcxzok2

moves:

[bx],cl

moves:

[bx+1],al

incsi

addbx,2

jmpshorts2

ok2:

popdx

popes

popbx

popax

popsi

popcx

ret

;********************************************

;将al中的bcd码转换成十进制存储在al中返回*

;********************************************

bcd_ten:

pushbx

pushcx

pushdx

movdl,al

movcx,4

shral,cl

movbl,10

mulbl

anddl,00001111b

addal,dl

popdx

popcx

popbx

ret

;****************************************

;显示提示信息*

;****************************************

prompt1:

jmpshortp1_start

p1db"errornumber:

",0

p1_start:

pushax

pushcx

pushdx

pushds

pushsi

movax,segp1

movds,ax

movsi,offsetp1

movdh,1

movdl,1

movcl,11101100b

callshow_str

popsi

popds

popdx

popcx

popax

ret

;*********************************

;解释执行模块*

;*********************************

interpret:

movdh,12

movdl,2

movcl,01101010b

callshow_str

callprint

callprompt1

callerror_num_disp

callprompt2

calltime_disp

ret

codeends

endstart

;*********************************

;显示提示信息*

;*********************************

prompt2:

jmpshortp2_start

p2db"alltime:

",0

p2_start:

pushax

pushcx

pushdx

pushds

pushsi

movax,segp2

movds,ax

movsi,offsetp2

movdh,3

movdl,1

movcl,11101100b

callshow_str

popsi

popds

popdx

popcx

popax

ret

 

7、调试及运行结果

错误字符数:

107

测试时间:

11秒

 

8、课程设计心得

一周的课程设计在忙忙碌碌中一晃而这次课程设计进一步端了我的学习态度,学会了实事求是,严谨的作风,提高了动手能力。

实事求是,严谨的工作作风是我们所必须具备的,是什么就是什么。

科学来不得半点儿马虎。

否则就会“差之毫厘,失之千里。

”同时,对自己要严格要求,不能够一知半解,要力求明明白白。

急于求成是不好的,我有所感受。

如果省略了那些必要的步骤,急于求成,不仅会浪费时间,还会适得其反。

在我看来,懂得少,并不可怕,可怕的是不向别人虚心学习。

没有人生下来就知道什么,也没有人生下来就很聪明。

即使天才,也要通过后天的努力,才获得成功的。

我觉得动手之前,头脑里必须清楚该怎么做,这一点是很重要的。

就目前来说,我的动手能力虽然差一点,但我想,通过我的不懈努力,在这方面,我总会得到提高。

这一点,我坚信。

因为别人能做到的,我也一定能做到。

在此次的课程设计中我最大的体会就是进一步认识到了理论联系实践的重要性。

一份耕耘,一份收获。

通过一个星期电子实习,让我明白科学的思维方法和学习方法是多么重要,只有这样才能够有很高的效率,才能够让自己的工作更完美。

总而言之,此次课程设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。

谢谢老师给我们提供这么好的机会,为我们之后走向社会奠定了一个好的基础。

 

9、设计的主要参考文献

[1]宋杰,汪志宏,江敏,微机原理与接口技术课程设计,机械工业出版社,2005.4

[2]周明德,微型计算机系统原理及应用习题集、习题解答与实验指导,清华大学出版社,2005.7

[3]张开成,微型计算机原理,西南师范大学出版社,2006.8

[4]沈美明,温冬婵,IBM-PC汇编语言程序设计第2版,清华大学出版社,2006.5

[5]戴梅萼,史嘉权,微型机原理与技术-习题、实验和综合训练题集,清华大学出版社,2009.4

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

当前位置:首页 > 高等教育 > 文学

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

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