微机原理课程设计报告书.docx
《微机原理课程设计报告书.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告书.docx(15页珍藏版)》请在冰点文库上搜索。
微机原理课程设计报告书
目录
摘要................................................................................................................................1
1程序要求....................................................................................................................2
2程序设计的目的........................................................................................................2
3程序设计的思路........................................................................................................2
4程序设计的流程框图...............................................................................................3
5程序设计的源程序...................................................................................................4
6程序设计的运行调试过程.......................................................................................7
结束语..........................................................................................................................10
参考文献......................................................................................................................11
摘要
通过微机原理与接口技术这门课程的学习,我们了解到在PC系统中,BIOS可以实现对系统中种种常用设备的输入输出操作的管理,键盘输入输出中断调用,能实现从键盘输入字符到AL寄存器、读键盘缓冲区字符到AL寄存器、读取特殊功能键的状态等功能。
本程序的要求是利用键盘输入30个字符并通过系统时钟得到输入这30个字符所需要的时间间隔,此外,还要在屏幕上显示输入的字符和时间间隔。
本文主要介绍了程序设计的目的、思路和调试程序并验证结果是否与要求符合的过程。
最后本文还对本次课程设计相关问题进行了总结。
关键词:
微机原理中断调用时间间隔屏幕显示
打字计时练习
1程序要求
问题:
打字计时练习
通过系统时钟得到输入30个字符所需的时间间隔,并在屏幕上显示输入的字符和时间间隔。
2程序设计的目的
通过本次课程设计,我认为可以达到以下几个目的:
1.加深学生对汇编语言的理解,提高学生利用汇编语言进行程序设计的能力。
2.使学生了解并掌握如何通过系统时钟得到输入字符所需要的时间间隔。
3.使学生熟练掌握汇编语言程序设计的过程、方法及实现,并巩固在微机原理课堂上学到的知识。
4.让学生知道并会使用DOS的21H中断类型的09H功能。
3程序设计的思路
本次课程设计题目的要求是通过系统时钟得到输入30个字符所需的时间间隔,并在屏幕上显示输入字符和时间间隔。
要想用汇编语言实现打字程序的思想,首先利用指针保存好30个测试用的字符,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的21H的01H功能,接受从键盘输入的第一个字符字符,然后调用DOS的21H的2cH功能获取系统时间,将系统时间存入TIMEBUFF中。
接着将输入剩余的29个字符放在循环中,待输入30个字符完毕后再次调用DOS的21H的2cH功能获取系统时间,将此次的时间运算后放入dx中,将开始输入的时间放入ax中,将两次的时间差放入cx中,其中ch放秒钟十位,cl放个位。
调用比较输入的字符是否为正确的函数,通过DOS的21H的02H功能调用显示输入的字母和其中输错字母的个数,然后显示时间间隔。
调用DOS的21H中断类型的07H,当接下来输入如果是”q”就退出,是其他字符就清空错误的数目还有30个字符的指针,开始新一轮的打字计时。
4程序设计的流程框图
图2-2MATLAB程序流程图
否
是
否
是
5程序设计的源程序
DATAsegment
TIPdb0DH,0AH,'-------Pleaseinput30string!
----------',0DH,0AH,'$'
TIP1db0DH,0AH,'---------nowletusbegin------------',0DH,0AH,'$'
TIMEBUFF1db0;保存开始输入时的分钟
TIMEBUFF2db0;保存开始输入时的秒
STR1db'ABCDEFGHIJKLMNOPQRSTUVWXYZABCD',0DH,0AH,'$';30个字符
ERRORFLAGdb0;保存30个字符的指针
ERRORdb0;保存错误的数目
TIMEISdb0DH,0AH,'Thetimeis','$'
ERRORISdb0DH,0AH,'Thenumberoferroris','$'
RESTARTdb0DH,0AH,'>>Ifpressqthesystemwillquitortheprogramwillrestart','$'
DATAends
ACKsegment
dw20dup(0)
ACKends
CODEsegment
assumecs:
CODE,ds:
DATA,ss:
ACK
start:
movax,ACK
movss,ax
movsp,40
movax,DATA;屏幕初始显示
movds,ax
movdx,offsetTIP
movah,9
int21H
movdx,offsetTIP1
movah,9
int21H
movdx,offsetSTR1;显示30个字符
movah,9
int21H
movah,1;调用1号中断接受第一个字符
int21h
callCompare
movah,2CH;调用2CH号中断,获取系统时间
int21H
movTIMEBUFF1,cl;将系统时间存入TIMEBUFF中
movTIMEBUFF2,dh
movcx,29;剩余的29个字符放在循环中
loops:
movah,1
int21H
callCompare
looploops
movah,2CH;输入完毕,再次获取系统时间
int21H
moval,cl;将此次的时间运算后放入dx中
movcl,60
mulcl
movcl,8
shrdx,cl
addax,dx
movdx,ax
moval,TIMEBUFF1;将开始输入的时间放入ax中
movcl,60
mulcl
xorcx,cx
movcl,TIMEBUFF2
addax,cx
subdx,ax;将两次的时间差放入cx中,其中ch放秒钟十位,cl放个位
movax,dx
movcl,10
divcl
movch,al
movcl,ah
movax,DATA;显示“Thetimeis”
movdx,offsetTIMEIS
movah,9
int21H
movdl,ch;显示时间间隔
adddl,48
movah,2
int21h
movdl,cl
adddl,48
movah,2
int21h
movax,DATA;显示“Thenumberoferroris”
movdx,offsetERRORIS
movah,9
int21H
xordx,dx;显示error
movdl,ERROR
movax,dx
movcl,10
divcl
movcx,ax
movdl,al
adddl,48
movah,2
int21h
movdl,ch
adddl,48
movah,2
int21h
movax,DATA;显示“Ifpressqthesystemwillquitortheprogramwillrestart”
movdx,offsetRESTART
movah,9
int21H
movah,7;如果键入q的话则退出系统,否则继续运行
int21h
cmpal,'q'
jneRE
jmpKOUT
RE:
movbl,ERRORFLAG;如果继续的话清空错误的数目还有30个字符的指针
movbh,ERROR
movbx,0
movERRORFLAG,bl
movERROR,bh
jmpstart
KOUT:
movah,4CH
int21h
Compare:
;比较输入的字符是否正确的函数
pushbx
pushcx
pushdx
xorbx,bx
movbl,ERRORFLAG
movdl,ERROR
movcl,STR1[bx]
cmpal,cl
jenext
incdl
next:
addbl,1
movERROR,dl
movERRORFLAG,bl
popdx
popcx
popbx
ret
CODEends
endstart
6程序设计的运行调试过程
(1).首先我们先打开实验平台MF2KP如下图1所示:
图1实验运行平台
(2).接着我们在空白处输入自己设计的汇编程序如下图2所示:
图2输入源程序图
(3).最后我们通过编译&连接&运行来调试程序和查看程序运行结果。
如果程序有错误的话,则显示如下图3所示:
图3程序报告错误图
初次调试时,我们可能会遇到很多问题,例如输入程序语法错误、语言输入法错误和标号标错等,经过不断地摸索和修正,最终排除掉程序的所有错误。
若程序运行没问题,则显示如下图4所示:
图4程序运行图
(4)根据程序提示要求,键入30个字符,最终运行结果如下图5示:
图5程序运行结果图
结束语
众所周知,在微机中,最基础的语言就是汇编语言。
汇编语言作为一个最基础和最古老的计算机语言在重大的编程项目中应用十分广泛。
然而,事物总有两面性。
其中,汇编语言最令人头疼的是,汇编语言比较复杂,对某个数据进行修改时,本来很简单的一个操作却要用比较烦琐的语言来解决,而这些语言本身在执行和操作的过程中,占有大量的时间和成本。
所以,在一些讲求效率的场合,这样做并不可取。
但是,汇编语言对于学习其他计算机语言起到了一个比较、对照和参考的促进作用。
个人认为,学习事物总是从最简单的和最基础的开始。
那么要想学好高级语言也应当从汇编语言开始学起。
学习汇编语言实际上是培养了我们学习计算机语言的能力和素养。
记得,以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序的流程框图画出来,然而,我总觉得没必要这样做,因为这样会很浪费时间。
但是,这次的微机原理课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序流程图是很有必要的。
因为通过程序流程图,在做程序设计的过程中,我们每一步要做什么,每一步要完成什么任务都会有一个很清楚的思路,而且在程序测试的过程中也有利于检查错误。
其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过多次上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的认识。
通过这次课程设计使我懂得了理论与实际相结合的重要性,俗话说“实践是检验真理的唯一标准”,确实,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实验中得出结论,才能发挥理论知识的真正作用,从而提高自己的实际动手能力和独立思考的能力。
参考文献
【1】王爽《汇编语言》,第2版,清华大学出版社,2008.4
【2】彭虎、周佩玲、傅忠谦《微机原理与接口技术》,第3版,电子工业出版社,2011.8
【3】齐志儒、高福祥《汇编语言程序设计》,第2版,东北大学出版社,2001.1
【4】龚尚福《微型计算机汇编语言程序设计》,第1版,西安电子科技大学出版社,2003.7
【5】朱玉龙、任文岚《汇编语言程序设计》,第1版,清华大学出版社,2003.8