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