微机原理应用打字计时练习Word文档下载推荐.docx

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

微机原理应用打字计时练习Word文档下载推荐.docx

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

微机原理应用打字计时练习Word文档下载推荐.docx

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

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:

jnewrong

movbl,01101010b;

输入正确时的显示颜色

jmppri

wrong:

incbp

movbl,01101100b;

输入错误时的显示颜色

pri:

incsi

incdl

movah,9;

输出字符

jmppr_start

p_end:

calltimer

popsi

popdx

popcx

popbx

popax

ret

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

错误字符个数输出模块*

error_num_disp:

pushax

pushsi

pushbp

pushds

movax,count

movax,bp

calldtoc

movdh,1

movdl,15

movcl,0ach

callshow_str

popds

popbp

popax

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

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

timer:

jmpshortt_start

tdw0

t_start:

moval,2

out70h,al

inal,71h

callbcd_ten

movbl,60

mulbl

movbx,ax

moval,0

movah,0

addax,bx

subax,t

movt,ax

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

显示时间*

time_disp:

movax,all_time

movax,t

movdh,3

movdl,12

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

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

si指向的存储空间中*

dtoc:

pushdi

movdi,0

movbx,10

dtoc1:

movdx,0

divbx

movcx,ax

adddx,30h

incdi

jcxzdtoc2

jmpdtoc1

dtoc2:

movcx,di

dtoc3:

popdx

movds:

[si],dl

loopdtoc3

popdi

ret

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

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

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

show_str:

pushcx

pushes

moval,0A0h

decdh

muldh

muldl

subax,2

addbx,ax

movax,0B800h

moves,ax

moval,cl

movch,0

s2:

movcl,ds:

jcxzok2

moves:

[bx],cl

[bx+1],al

addbx,2

jmpshorts2

ok2:

popes

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

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

bcd_ten:

pushbx

movdl,al

movcx,4

shral,cl

movbl,10

anddl,00001111b

addal,dl

显示提示信息*

prompt1:

jmpshortp1_start

p1db"

errornumber:

"

p1_start:

pushdx

movax,segp1

movsi,offsetp1

movdl,1

movcl,11101100b

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

解释执行模块*

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

movdh,12

movdl,2

movcl,01101010b

callprint

callprompt1

callerror_num_disp

callprompt2

calltime_disp

codeends

endstart

prompt2:

jmpshortp2_start

p2db"

alltime:

p2_start:

movax,segp2

movsi,offsetp2

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