微机原理课程设计程序开发中对系统时间的显示.doc
《微机原理课程设计程序开发中对系统时间的显示.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计程序开发中对系统时间的显示.doc(22页珍藏版)》请在冰豆网上搜索。
目录
一概述 3
二总体方案设计 4
三详细设计 7
四程序的调试与运行结果说明 12
五课程设计总结 14
谢启 15
附录 16
参考文献 21
一概述
1.课程设计的目的
(1)使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
(2)培养学生综合运用所学知识独立完成汇编程序课题的能力。
(3)培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
(4)提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
(5)培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
(6)对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
2.课程设计的要求
要求完成一个显示系统当前日期和时间的程序,即通过按下键盘上某个按键就可以显示系统的日期和时间或者终止程序。
在出现的提示信息后输入小写字母“d”,显示系统当前日期;输入小写字母“t”,显示系统当前时间;输入小写字母“q”,结束程序。
此程序涉及到对DOS和BIOS的常用功能的调用,要求学生掌握使用汇编语言对I/O中断的使用。
二总体方案设计
1.程序总体流程图
如图2-1。
开始
显示提示信息
接收键盘输入
是“q”?
是“d”?
是“t”?
退出程序
是
是
是
否
否
否
调用DATE,显示系统日期
调用TIME,显示系统时间
图2-1程序总体流程图
2.工作原理
在DOS环境下完成,先利用BIOS功能调用中显示器驱动程序的00H类型调用,设置显示器的显示模式为80*25彩色。
在屏幕中央显示提示信息(提示用户输入“d”或“t”或“q”)。
然后对用户输入的字母进行判断,利用分支程序分别调用不同的子程序。
两个子程序的功能分别是显示当前日期(用2AH的DOS功能调用来取日期),显示当前时间(用2CH的DOS功能调用来取时间)。
必须用到的DOS功能调用:
取当前系统日期:
功能号为2AH,返回值送入CX,DX寄存器中。
取当前系统时间:
功能号为2CH,返回值送入CX,DX寄存器中。
3.部分程序设计及功能
(1)文本显示
在显示彩色文本时,属性字节能够选择前景(显示的字节)和背景的颜色;每个字符可以选择16种颜色中的一种,背景有8种颜色可以选择;在程序代码中,我设置了显示绿色,代码部分如下:
LOP:
PUSHCX;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVAL,[DI]
ADDAL,30H
MOVBL,02H
(2)时间日期转化数制
在定义堆栈寄存器,按循环要求读取系统日期项,由于读取的日期项是二进制代码,因此需调用DIVNUMPROC子程序转换为BCD码,其中部分代码如下:
DIVNUMPROCNEAR
PUSHCX
AGAIN:
MOVBL,0AH
DIVBL
MOV[DI],AH
MOVAH,0
INCDI
LOOPAGAIN
DECDI
POPCX
RET
DIVNUMENDP
(3)光标设置
利用INT10H的功能1是光标显现或者关闭,这个功能也控制光标行的开始和结束,也就是控制光标的大小;INT10H的功能2设置光标位置,光标位置的行号设在DH寄存器中,列号设在DL中;BH中必须包含被输出的页号,对单色显示器来说,页号总是0;INT10H功能3是读光标位置,页号也必须在BH中指定,此功能把光标位置的行号回送给DH,列号回送给DL;程序中的代码部分如下:
MOVBH,0
MOVCX,1
MOVAH,9
INT10H
MOVBH,0
MOVAH,3
INT10H
INCDL
MOVAH,2
INT10H
三详细设计
本程序通过调用不同的子程序来实现系统功能,以下为各主要子程序的详细设计。
1.日期子程序
系统通过条用时间子程序来实现获取并显示当前时间的功能。
此程序主要涉及三个重点:
(1)DOS和BIOS的常用功能的调用。
(2)掌握使用汇编语言对I/O中断的使用。
(3)ACS码与BCD码数制上的转化。
子程序的程序流程图如下,见图3-1。
开始
获取原中断类型1CH
设置新的中断类型
执行中断处理程序
保护现场
中断返回
读取系统时间
保存原中断类型
分别将时间的BCD码转换为字符
在指定位置写显存以显示日期
恢复现场
图3-1日期子程序的流程图
当键盘输入字母“D”时所调用执行的子程序;首先定义堆栈寄存器,按循环要求读取系统日期项,由于读取的日期项是二进制代码,因此需调用DIVNUMPROC子程序转换为BCD码,然后接着调用LISNUMPROC予以显示;执行完DIVNUMPROC子程序后调用DIS1PROC显示一个分隔符”-”,完成一个日期项的显示,然后再循环去读取其他日期项;最后返回主程序执行主程序。
子程序的关键代码:
MOVDX,OFFSETBUF2
MOVAH,9
INT21H
MOVAH,2AH
INT21H
MOVYEAR,CX
MOVMON,DH
MOVDAY,DL
MOVDI,OFFSETBUF
MOVAX,YEAR
MOVCX,4
CALLDIVNUM
CALLLISNUM
CALLDIS1
MOVAL,MON
MOVAH,0
MOVCL,2
CALLDIVNUM
CALLLISNUM
CALLDIS1
MOVAL,DAY
MOVAH,0
MOVCL,2
CALLDIVNUM
CALLLISNUM
CALLENTER
JMPSTART
2.时间子程序
该时间子程序与日期子程序的主要功能以及主要实现方法都十分相识,同样涉及到汇编语言中DOS和BIOS的常用功能的调用,汇编语言对I/O中断的使用以及ACS码与BCD码数制上的转化。
系统主程序通过调用该子程序实现要求的功能。
程序的流程图如图3-2。
开始
获取原中断类型1CH
保存原中断类型
设置新的中断类型
执行中断处理程序
保护现场
中断返回
读取系统时间
保存原中断类型
分别将时间的BCD码转换为字符
在指定位置写显存以显示时间
恢复现场
图3-2时间子程序流程图
当键盘输入字母“T”时所调用执行的子程序;首先定义堆栈寄存器,按循环要求读取系统时间项,由于读取的日期项是二进制代码,因此需调用DIVNUMPROC子程序转换为BCD码,然后调用LISNUMPROC予以显示;执行完DIVNUMPROC子程序后调用DIS2PROC显示一个分隔符”:
”,完成一个日期项的显示,然后再循环去读取其他日期项;最后返回主程序执行主程序。
其执行过程与执行日期子程序相似。
子程序关键代码:
MOVDX,OFFSETBUF3
MOVAH,9
INT21H
MOVAH,2CH
INT21H
MOVHOUR,CH
MOVMIN,CL
MOVSEC,DH
MOVDI,OFFSETBUF
MOVAL,HOUR
MOVAH,0
MOVCX,2
CALLDIVNUM
CALLLISNUM
CALLDIS2
MOVAL,MIN
MOVAH,0
MOVCX,2
CALLDIVNUM
CALLLISNUM
CALLDIS2
MOVAL,SEC
MOVAH,0
MOVCX,2
CALLDIVNUM
CALLLISNUM
CALLENTER
JMPSTART
3.DIVNUM子程序
在定义堆栈寄存器,按循环要求读取系统日期和时间项,由于读取的日期项是二进制代码,因此需调用DIVNUMPROC子程序转换为BCD码。
在系统运行的过程中,通过时间子程序和日期子程序对DIVNUM子程序的调用来实现ACS码和BCD码的数制转化。
4.LISNUM子程序
时间子程序和日期子程序对LISNUM子程序的调用来实现显示输出日期或者时间的数字。
5.DIS1子程序
DIS1子程序在程序中用来将显示的年月日用“-”隔开,如显示“20100823”时加入分隔号,即可显示为“2010-08-23”。
该子程序在显示日期时调用即可。
程序关键代码:
MOVDL,'-'
MOVAH,2H
INT21H
RET
6.DIS2子程序
功能类似DIS1子程序,将显示的小时分钟秒钟用“:
”隔开,如显示“214013”时加入分隔号,即可显示为“21:
40:
13”。
该子程序在显示时间时调用即可。
程序相关代码:
MOVDL,':
'
MOVAH,2H
INT21H
RET
7.ENTER子程序
该子程序用来显示输出字符。
程序关键代码:
PUSHDX
PUSHAX
MOVDL,0AH
MOVAH,2H
INT21H
MOVDL,0DH
MOVAH,2H
INT21H
POPAX
POPDX
RET
8.EXIT子程序
带返回码终止程序。
四程序的调试与运行结果说明
1.调试程序:
(1)编译源文件,命名为shengsi.asm。
(2)采用命令格式,masmshengsi.asm将生成一个OBJ文件,检查源程序中的错误,如有改正。
(3)键入连接命令:
linkshengsi.obj,将会生成一个exe可执行文件。
(4)键入shengsi.exe回车,即可显示结果。
该过程见图4-1。
程序编译成功
程序连接成功
图4-1程序调试过程
2.实验结果分析
通过以上的结果显示可以看出结果成功完成本次课程设计的目的和任务,本次课程设计严格按照课程设计任务的要求:
运行可执行程序shengsi.exe,在出现的提示信息中输入大写字母“D”,可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序;若不是相关字符,则从头执行程序。
实现过程如图4-2。
运行结果:
显示当前时间和日期
正确运行程序
图4-2程序显示过程
3.DEBUG调试
在验证程序正确显示后,为了分析各寄存器值的变化以及单步执行指令,使用了DEBUG命令进行调试。
调试过程如图4-3。
DEBUG调试过程
图4-3DEBUG调试过程
五课程设计总结
这次汇编课程设计为我们提供了与众不同的学习方法和学习机会,让我们从传统的被动授学转变为主动求学;从死记硬背的模式中脱离出来,转变为在实践中学习,增强了领悟、创新和推断的能力。
掌握自学的方法,形成工程理论整体模式,使工作、学习、生活都步入系统化流程;思考方式成熟,逻辑性规范、明确。
这些方法的提高是