微机原理课程设计程序开发中对系统时间的显示.doc

上传人:wj 文档编号:1310614 上传时间:2023-04-30 格式:DOC 页数:22 大小:276KB
下载 相关 举报
微机原理课程设计程序开发中对系统时间的显示.doc_第1页
第1页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第2页
第2页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第3页
第3页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第4页
第4页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第5页
第5页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第6页
第6页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第7页
第7页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第8页
第8页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第9页
第9页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第10页
第10页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第11页
第11页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第12页
第12页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第13页
第13页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第14页
第14页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第15页
第15页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第16页
第16页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第17页
第17页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第18页
第18页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第19页
第19页 / 共22页
微机原理课程设计程序开发中对系统时间的显示.doc_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理课程设计程序开发中对系统时间的显示.doc

《微机原理课程设计程序开发中对系统时间的显示.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计程序开发中对系统时间的显示.doc(22页珍藏版)》请在冰点文库上搜索。

微机原理课程设计程序开发中对系统时间的显示.doc

目录

一概述 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调试过程

五课程设计总结

这次汇编课程设计为我们提供了与众不同的学习方法和学习机会,让我们从传统的被动授学转变为主动求学;从死记硬背的模式中脱离出来,转变为在实践中学习,增强了领悟、创新和推断的能力。

掌握自学的方法,形成工程理论整体模式,使工作、学习、生活都步入系统化流程;思考方式成熟,逻辑性规范、明确。

这些方法的提高是终身受益的,我认为这难得的一周,让我真正懂得了生活和学习的基本规律。

通过这次课程设计,我们对汇编各个函数以及语句有了进一步的了解,对各个语句的功能有了更深刻的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样的试验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。

在课程设计过程中,同组人员之间相互合作,共同研究使我更加坚信了团体的力量。

在团体的共同协作和努力下,任何的难题都可以被解决。

在这次课程设计中,对调用子程序、程序循环、DOS及BIOS功能调用等知识的理解更为加深,在运用的时候更为熟悉了;还有在运用堆栈的时候我总是出错,但通过这次课程设计,我对堆栈了解加深了。

紧张忙碌的课程设计虽然在历经一个周的时间后结束了,完成了课程设计的任务,但是从中发现的问题也是值得去深思的。

我想经过这一个周的课程设计所发现的问题对我们会有很大的启示,在以后的学习中也会大有帮助。

在以后的学习中我会不断的改进学习方法,在实践中学习,不断提高自我,完美自我,全面提高自己。

在本次课程设计过程中,杨斐和姚莉等老师以及相关同学给予我相当大的支持和帮助,在此表示诚挚的感谢。

谢启

这一次课题设计以及报告是在马学军、晏伯武、姚莉、杨斐四位老师精心指导和大力支持下完成的。

在这次课题设计的过程中老师们以其严谨求实的治学态度、高度的敬业精神、兢兢业业、孜孜以求的工作作风和大胆创新的进取精神对我产生重要影响。

他们渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。

同时,在此次课程设计过程中我也学到了许多了关于汇编语言方面的知识,实验技能有了很大的提高。

在课题设计和编写论文的过程中,最初我遇到了不少的困难和难题,几位老师不顾日常教学工作的辛苦,依然多次与我单独讨论问题,对我的思维进行启发,并且鼓励我从严要求,才使得我的汇编能力通过这次课题设计有了实质性的提高。

另外,我还要特别感谢06级学长对我实验以及论文写作的指导。

几位学长本着严谨的态度多次指出我论文中的错误和需要提高的地方,并为我出谋划策使我的这篇论文才有现在的水平。

还要感谢,本次同组的刘宇、熊启猛、彭瑞同学对我的无私帮助和关心。

小组四个人的多次讨论和相互研究是这次课题成功的关键所在。

通过与他们的合作让我更加深刻的理解了团队合作的重要性,以及大学友谊的重要性。

同样三人行必有我师,在这次设计过程中我从他们的身上我也学到了不少的优点。

最后,再次对关心、帮助我的老师和同学表示衷心地感谢。

附录

以下为程序的主要代码:

//***************定义堆栈段***************//

STACKSEGMENTSTACK

DW200DUP(?

) //定义200个字的空间

STACKENDS

//***************定义数据段***************//

DATASEGMENT

YEARDW?

//定义年

MONDB?

//定义月

DAYDB?

//定义日

HOURDB?

//定义小时

MINDB?

//定义分钟

SECDB?

//定义秒钟

BUFDB8DUP(?

) //定义8字节缓存存放日期和时间数据

BUF1DB'WELCOMETOTHESHOWTIMEPROGRAM!

PLEASEINPUTHERE(DFORDATE,TFORTIME,QTOQUIT):

$'

//显示提示:

键入D显示日期,键入T显示时间,键入Q退出程序

BUF2DB'THEDATEOFTODAYIS:

$'

BUF3DB'THETIMERIGHTNOWIS:

$'

BUF4DB'BYE!

THANKYOU!

$'

DATAENDS

//***************以下皆为定义代码段***************//

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

//***************主程序***************//

START:

MOVAX,DATA

MOVDS,AX

MOVBH,1;;;;;;;;;;;;;;;;;;;;; //设置页号

MOVDH,0 //行号

MOVDL,0 //行号

MOVAH,2 //BIOS中断10的2号功能调用

INT10H;;;;;;;;;;;;;;;;;;;;;; //使用BIOS的10H中断的2号功能调用来置光标位置

MOVDX,OFFSETBUF1

MOVAH,09H //显示字符串

INT21H

MOVAH,01H

INT21H

CALLENTER //调用回车和换行子程序

CMPAL,44H //传送D的ASCII码值

JZDATE //判断是否输入字符“D”

CMPAL,54H //传送T的ASCII码值

JZTIME //判断是否输入字符“T”

CMPAL,51H/ /传送Q的ASCII码值

JZGOON //判断是否输入字符“Q”

JMPSTART

GOON:

JMPEXIT //如果输入字符“Q”则退出

//***************日期函数***************//

DATE:

MOVDX,OFFSETBUF2

MOVAH,9

INT21H

MOVAH,2AH

INT21H //系统调用,取系统时间

MOVYEAR,CX

MOVMON,DH

MOVDAY,DL

MOVDI,OFFSETBUF

MOVAX,YEAR

MOVCX,4

CALLDIVNUM //对年进行数值转换并存储于八个缓存中等待输出

CALLLISNUM //输出缓存中的数,如“2010”

CALLDIS1 //显示“-”将年和月分隔

MOVAL,MON

MOVAH,0

MOVCL,2

CALLDIVNUM //对月进行数值转换并存储于八个缓存中等待输出

CALLLISNUM //输出缓存中的数,如“6”

CALLDIS1 //显示“-”将月和日分隔

MOVAL,DAY

MOVAH,0

MOVCL,2

CALLDIVNUM //对日进行数值转换并存储于八个缓存中等待输出

CALLLISNUM //输出缓存中的数,如“12”

CALLENTER

JMPSTART

//***************时间函数***************//

TIME:

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

//***************带返回码终止程序***************//

EXIT:

MOVDX,OFFSETBUF4

MOVAH,9

INT21H

MOVBL,10;;;;;;;;;;;;;;;;;; //存储循环次数

DELAY:

MOVCX,33144

CALLWAITF //调延时子程序,每次调用耗时33144*15.08us=0.5s

DECBL

JNZDELAY;;;;;;;;;;;;;;;;;; //循环10次,则延时5s

MOVAH,4CH

INT21H

//***************数制转化函数***************//

DIVNUMPROCNEAR//将ACS码转化为BCD码

PUSHCX

AGAIN:

MOVBL,0AH

DIVBL

MOV[DI],AH //取出值的十进制的每一位

MOVAH,0

INCDI

LOOPAGAIN

DECDI

POPCX

RET

DIVNUMENDP

//***************显示缓存中数值函数***************//

LISNUMPROCNEAR //按照一定的显示特性将缓存中数值显示出来

LOP:

;MOVDL,[DI]

;ADDDL,30H

;MOVAH,2

;INT21H

PUSHCX;;;;;;;;;;;;;;;;;;;;;;;;;;

MOVAL,[DI]

ADDAL,30H

MOVBL,02H

MOVBH,0

MOVCX,1

MOVAH,9

INT10H //显示墨绿色字符

MOVBH,0

MOVAH,3

INT10H //取光标属性

INCDL

MOVAH,2

INT10H //置光标属性

POPCX;;;;;;;;;;;;;;;;;;;

DECDI

LOOPLOP

INCDI

RET

LISNUMENDP

//***************使用"-"分隔日期函数***************//

DIS1PROCNEAR

MOVDL,'-'

MOVAH,2H

INT21H

RET

DIS1ENDP

//***************使用":

"分隔时间函数***************//

DIS2PROCNEAR

MOVDL,':

'

MOVAH,2H

INT21H

RET

DIS2ENDP

//***************显示回车换行函数***************//

ENTERPROCNEAR

PUSHDX

PUSHAX

MOVDL,0AH

MOVAH,2H

INT21H

MOVDL,0DH

MOVAH,2H

INT21H

POPAX

POPDX

RET

ENTERENDP

//***************延时函数***************//

WAITFPROCNEAR;;;;;;;;;;;;;;;;

PUSHAX

WAITF1:

INAL,61H

ANDAL,10H

CMPAL,AH //监控PB4的状态值,状态值每15.08us变化一次

JEWAITF1

MOVAH,AL

LOOPWAITF1

POPAX

RET

WAITFENDP;;;;;;;;;;;;;

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2