微机原理课程设计程序开发中对系统时间的显示_第1页
微机原理课程设计程序开发中对系统时间的显示_第2页
微机原理课程设计程序开发中对系统时间的显示_第3页
微机原理课程设计程序开发中对系统时间的显示_第4页
微机原理课程设计程序开发中对系统时间的显示_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录一 概述3二 总体方案设计4三 详细设计7四 程序的调试与运行结果说明12五 课程设计总结14谢启15附录16参考文献21一 概述1. 课程设计的目的(1)使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。(2)培养学生综合运用所学知识独立完成汇编程序课题的能力。(3)培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。(4)提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。(5)培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题

2、的新途径的悟性,初步培养工程意识和创新能力。(6)对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。2. 课程设计的要求要求完成一个显示系统当前日期和时间的程序,即通过按下键盘上某个按键就可以显示系统的日期和时间或者终止程序。在出现的提示信息后输入小写字母“d”,显示系统当前日期;输入小写字母“t”,显示系统当前时间;输入小写字母“q”,结束程序。此程序涉及到对DOS和BIOS的常用功能的调用,要求学生掌握使用汇编语言对I/O中断的使用。二 总体方案设计1. 程序总体流程图如图2-1。开始显示提示信息接收键盘输入是“q”?是“d”?是“t”?退

3、出程序是是是否否否调用DATE,显示系统日期调用TIME,显示系统时间图2-1 程序总体流程图2. 工作原理在DOS环境下完成,先利用BIOS功能调用中显示器驱动程序的00H类型调用,设置显示器的显示模式为80*25彩色。在屏幕中央显示提示信息(提示用户输入“d”或“t”或“q”)。然后对用户输入的字母进行判断,利用分支程序分别调用不同的子程序。两个子程序的功能分别是显示当前日期(用2AH的DOS功能调用来取日期),显示当前时间(用2CH的DOS功能调用来取时间)。 必须用到的DOS功能调用:取当前系统日期:功能号为2AH,返回值送入CX,DX寄存器中。取当前系统时间:功能号为2CH,返回值送

4、入CX,DX寄存器中。3. 部分程序设计及功能(1)文本显示在显示彩色文本时,属性字节能够选择前景(显示的字节)和背景的颜色;每个字符可以选择16种颜色中的一种,背景有8种颜色可以选择;在程序代码中,我设置了显示绿色,代码部分如下:LOP: PUSH CX;MOV AL,DIADD AL,30HMOV BL,02H(2)时间日期转化数制在定义堆栈寄存器,按循环要求读取系统日期项,由于读取的日期项是二进制代码,因此需调用DIVNUM PROC子程序转换为BCD码,其中部分代码如下:DIVNUM PROC NEARPUSH CXAGAIN: MOV BL,0AHDIV BLMOV DI,AHMOV

5、 AH,0INC DILOOP AGAINDEC DIPOP CXRETDIVNUM ENDP(3)光标设置利用INT 10H的功能1是光标显现或者关闭,这个功能也控制光标行的开始和结束,也就是控制光标的大小;INT 10H的功能2设置光标位置,光标位置的行号设在DH寄存器中,列号设在DL中;BH中必须包含被输出的页号,对单色显示器来说,页号总是0;INT 10H功能3是读光标位置,页号也必须在BH中指定,此功能把光标位置的行号回送给DH,列号回送给DL;程序中的代码部分如下:MOV BH,0MOV CX,1MOV AH,9INT 10HMOV BH,0MOV AH,3INT 10HINC D

6、LMOV AH,2INT 10H三 详细设计本程序通过调用不同的子程序来实现系统功能,以下为各主要子程序的详细设计。1. 日期子程序系统通过条用时间子程序来实现获取并显示当前时间的功能。此程序主要涉及三个重点:(1)DOS和BIOS的常用功能的调用。(2)掌握使用汇编语言对I/O中断的使用。(3)ACS码与BCD码数制上的转化。子程序的程序流程图如下,见图3-1。 开 始获取原中断类型1CH 设置新的中断类型 执行中断处理程序 保护现场 中断返回 读取系统时间 保存原中断类型分别将时间的BCD码转换为字符在指定位置写显存以显示日期恢复现场图3-1 日期子程序的流程图当键盘输入字母“D”时所调用

7、执行的子程序;首先定义堆栈寄存器,按循环要求读取系统日期项,由于读取的日期项是二进制代码,因此需调用DIVNUM PROC子程序转换为BCD码,然后接着调用LISNUM PROC予以显示;执行完DIVNUM PROC子程序后调用DIS1 PROC显示一个分隔符”-”,完成一个日期项的显示,然后再循环去读取其他日期项;最后返回主程序执行主程序。子程序的关键代码: MOV DX,OFFSET BUF2MOV AH,9INT 21HMOV AH,2AHINT 21HMOV YEAR,CXMOV MON,DHMOV DAY,DLMOV DI,OFFSET BUFMOV AX,YEARMOV CX,4C

8、ALL DIVNUMCALL LISNUMCALL DIS1MOV AL,MONMOV AH,0MOV CL,2CALL DIVNUMCALL LISNUMCALL DIS1MOV AL,DAYMOV AH,0MOV CL,2CALL DIVNUMCALL LISNUMCALL ENTERJMP START2. 时间子程序该时间子程序与日期子程序的主要功能以及主要实现方法都十分相识,同样涉及到汇编语言中DOS和BIOS的常用功能的调用,汇编语言对I/O中断的使用以及ACS码与BCD码数制上的转化。系统主程序通过调用该子程序实现要求的功能。程序的流程图如图3-2。 开 始获取原中断类型1CH 保

9、存原中断类型 设置新的中断类型 执行中断处理程序 保护现场 中断返回 读取系统时间 保存原中断类型分别将时间的BCD码转换为字符在指定位置写显存以显示时间 恢复现场图3-2 时间子程序流程图当键盘输入字母“T”时所调用执行的子程序;首先定义堆栈寄存器,按循环要求读取系统时间项,由于读取的日期项是二进制代码,因此需调用DIVNUM PROC子程序转换为BCD码,然后调用LISNUM PROC予以显示;执行完DIVNUM PROC子程序后调用DIS2 PROC显示一个分隔符”:”,完成一个日期项的显示,然后再循环去读取其他日期项;最后返回主程序执行主程序。其执行过程与执行日期子程序相似。子程序关键

10、代码:MOV DX,OFFSET BUF3MOV AH,9INT 21HMOV AH,2CHINT 21HMOV HOUR,CHMOV MIN,CLMOV SEC,DHMOV DI,OFFSET BUFMOV AL,HOURMOV AH,0MOV CX,2CALL DIVNUMCALL LISNUMCALL DIS2MOV AL,MINMOV AH,0MOV CX,2CALL DIVNUMCALL LISNUMCALL DIS2MOV AL,SECMOV AH,0MOV CX,2CALL DIVNUMCALL LISNUMCALL ENTERJMP START 3. DIVNUM 子程序在定义

11、堆栈寄存器,按循环要求读取系统日期和时间项,由于读取的日期项是二进制代码,因此需调用DIVNUM PROC子程序转换为BCD码。在系统运行的过程中,通过时间子程序和日期子程序对DIVNUM 子程序的调用来实现ACS码和BCD码的数制转化。4. LISNUM 子程序时间子程序和日期子程序对LISNUM子程序的调用来实现显示输出日期或者时间的数字。5. DIS1子程序DIS1子程序在程序中用来将显示的年月日用“-”隔开,如显示“20100823”时加入分隔号,即可显示为“2010-08-23”。该子程序在显示日期时调用即可。程序关键代码:MOV DL,-MOV AH,2HINT 21HRET6 D

12、IS2子程序功能类似DIS1子程序,将显示的小时分钟秒钟用“:”隔开,如显示“214013”时加入分隔号,即可显示为“21:40:13”。该子程序在显示时间时调用即可。程序相关代码:MOV DL,:MOV AH,2HINT 21HRET7. ENTER子程序该子程序用来显示输出字符。程序关键代码:PUSH DXPUSH AXMOV DL,0AHMOV AH,2HINT 21HMOV DL,0DHMOV AH,2HINT 21HPOP AXPOP DXRET8. EXIT子程序带返回码终止程序。四 程序的调试与运行结果说明1. 调试程序:(1)编译源文件,命名为shengsi.asm 。(2)采

13、用命令格式,masm shengsi.asm将生成一个OBJ文件,检查源程序中的错误,如有改正。(3)键入连接命令:link shengsi.obj,将会生成一个exe可执行文件。(4)键入shengsi.exe回车,即可显示结果。该过程见图4-1。程序编译成功程序连接成功图4-1 程序调试过程2. 实验结果分析通过以上的结果显示可以看出结果成功完成本次课程设计的目的和任务,本次课程设计严格按照课程设计任务的要求:运行可执行程序shengsi.exe,在出现的提示信息中输入大写字母“D”,可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序;若不是相关字符

14、,则从头执行程序。实现过程如图4-2。运行结果:显示当前时间和日期正确运行程序图4-2 程序显示过程3. DEBUG调试在验证程序正确显示后,为了分析各寄存器值的变化以及单步执行指令,使用了DEBUG命令进行调试。调试过程如图4-3。DEBUG调试过程图4-3 DEBUG调试过程五 课程设计总结这次汇编课程设计为我们提供了与众不同的学习方法和学习机会,让我们从传统的被动授学转变为主动求学;从死记硬背的模式中脱离出来,转变为在实践中学习,增强了领悟、创新和推断的能力。掌握自学的方法,形成工程理论整体模式,使工作、学习、生活都步入系统化流程;思考方式成熟,逻辑性规范、明确。这些方法的提高是终身受益

15、的,我认为这难得的一周,让我真正懂得了生活和学习的基本规律。通过这次课程设计,我们对汇编各个函数以及语句有了进一步的了解,对各个语句的功能有了更深刻的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样的试验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。在课程设计过程中,同组人员之间相互合作,共同研究使我更加坚信了团体的力量。在团体的共同协作和努力下,任何的难题都可以被解决。在这次课程设计中,对调用子程序、程序循环、DOS及BIOS功能调用等知识的理解更为加深,在运用的时候更为熟悉了;还有在运用堆栈的时候我总是出错,但通过这次课程设计,我对堆栈了解加

16、深了。紧张忙碌的课程设计虽然在历经一个周的时间后结束了,完成了课程设计的任务,但是从中发现的问题也是值得去深思的。我想经过这一个周的课程设计所发现的问题对我们会有很大的启示,在以后的学习中也会大有帮助。在以后的学习中我会不断的改进学习方法,在实践中学习,不断提高自我,完美自我,全面提高自己。在本次课程设计过程中,杨斐和姚莉等老师以及相关同学给予我相当大的支持和帮助,在此表示诚挚的感谢。谢启这一次课题设计以及报告是在马学军、晏伯武、姚莉、杨斐四位老师精心指导和大力支持下完成的。在这次课题设计的过程中老师们以其严谨求实的治学态度、高度的敬业精神、兢兢业业、孜孜以求的工作作风和大胆创新的进取精神对我

17、产生重要影响。他们渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。同时,在此次课程设计过程中 我也学到了许多了关于汇编语言方面的知识,实验技能有了很大的提高。在课题设计和编写论文的过程中,最初我遇到了不少的困难和难题,几位老师不顾日常教学工作的辛苦,依然多次与我单独讨论问题,对我的思维进行启发,并且鼓励我从严要求,才使得我的汇编能力通过这次课题设计有了实质性的提高。另外,我还要特别感谢06级学长对我实验以及论文写作的指导。几位学长本着严谨的态度多次指出我论文中的错误和需要提高的地方,并为我出谋划策使我的这篇论文才有现在的水平。还要感谢,本次同组的刘宇、熊启猛、彭瑞同学对我的无私帮助和关心。

18、小组四个人的多次讨论和相互研究是这次课题成功的关键所在。通过与他们的合作让我更加深刻的理解了团队合作的重要性,以及大学友谊的重要性。同样三人行必有我师,在这次设计过程中我从他们的身上我也学到了不少的优点。最后,再次对关心、帮助我的老师和同学表示衷心地感谢。附录以下为程序的主要代码:/*定义堆栈段*/STACK SEGMENT STACKDW 200 DUP(?)/定义200个字的空间STACK ENDS/*定义数据段*/DATA SEGMENTYEAR DW ?/定义 年MON DB ?/定义 月DAY DB ?/定义 日HOUR DB ?/定义 小时MIN DB ?/定义 分钟SEC DB

19、?/定义 秒钟BUF DB 8 DUP(?)/定义 8字节缓存存放日期和时间数据BUF1 DB WELCOME TO THE SHOWTIME PROGRAM !PLEASE INPUT HERE(D FOR DATE,T FOR TIME,Q TO QUIT): $/显示提示:键入D显示日期,键入T显示时间,键入Q退出程序BUF2 DB THE DATE OF TODAY IS : $BUF3 DB THE TIME RIGHT NOW IS: $BUF4 DB BYE!THANKYOU!$DATA ENDS/*以下皆为 定义代码段*/CODE SEGMENTASSUME CS:CODE,D

20、S:DATA/*主程序*/START: MOV AX,DATAMOV DS,AXMOV BH,1;/设置页号MOV DH,0/行号MOV DL,0/行号MOV AH,2/BIOS中断10的2号功能调用INT 10H;/使用BIOS 的10H中断的2号功能调用来置光标位置MOV DX,OFFSET BUF1MOV AH,09H/显示字符串INT 21HMOV AH,01HINT 21HCALL ENTER/调用回车和换行子程序CMP AL,44H/传送D的ASCII码值JZ DATE/判断是否输入字符“D”CMP AL,54H/传送T的ASCII码值JZ TIME/判断是否输入字符“T”CMP

21、AL,51H/传送Q的ASCII码值JZ GOON/判断是否输入字符“Q”JMP STARTGOON: JMP EXIT/如果输入字符“Q”则退出/*日期函数*/DATE: MOV DX,OFFSET BUF2MOV AH,9INT 21HMOV AH,2AHINT 21H/系统调用,取系统时间MOV YEAR,CXMOV MON,DHMOV DAY,DLMOV DI,OFFSET BUFMOV AX,YEARMOV CX,4CALL DIVNUM/对年进行数值转换并存储于八个缓存中等待输出CALL LISNUM/输出缓存中的数,如“2010”CALL DIS1/显示“-”将年和月分隔MOV

22、AL,MONMOV AH,0MOV CL,2CALL DIVNUM/对月进行数值转换并存储于八个缓存中等待输出CALL LISNUM/输出缓存中的数,如“6”CALL DIS1/显示“-”将月和日分隔MOV AL,DAYMOV AH,0MOV CL,2CALL DIVNUM/对日进行数值转换并存储于八个缓存中等待输出CALL LISNUM/输出缓存中的数,如“12”CALL ENTERJMP START/*时间函数*/TIME: MOV DX,OFFSET BUF3MOV AH,9INT 21HMOV AH,2CHINT 21HMOV HOUR,CHMOV MIN,CLMOV SEC,DHMO

23、V DI,OFFSET BUFMOV AL,HOURMOV AH,0MOV CX,2CALL DIVNUM/对小时进行数值转换并存储于缓存中等待输出CALL LISNUM/输出缓存中的小时数CALL DIS2/显示“:”将小时和分钟分隔MOV AL,MINMOV AH,0MOV CX,2CALL DIVNUM/对分钟进行数值转换并存储于缓存中等待输出CALL LISNUM/输出缓存中的分钟时间CALL DIS2/显示“:”将分钟和秒钟分隔MOV AL,SECMOV AH,0MOV CX,2CALL DIVNUM/对秒钟进行数值转换并存储于缓存中等待输出CALL LISNUM/输出缓存中的秒钟时

24、间CALL ENTERJMP START /*带返回码终止程序*/ EXIT: MOV DX,OFFSET BUF4MOV AH,9INT 21HMOV BL,10;/ 存储循环次数DELAY:MOV CX,33144CALL WAITF/调延时子程序,每次调用耗时33144*15.08us=0.5sDEC BLJNZ DELAY;/ 循环10次,则延时5sMOV AH,4CHINT 21H/*数制转化函数*/DIVNUM PROC NEAR/将ACS码转化为BCD码PUSH CXAGAIN: MOV BL,0AHDIV BLMOV DI,AH/取出值的十进制的每一位MOV AH,0INC DILOOP AGAINDEC DIPOP CXRETDIVNUM ENDP/*显示缓存中数值函数*/LISNUM PROC NEAR/按照一定的显示特性将缓存中数值显示出来LOP: ;MOV DL,DI;ADD DL,30H;MOV AH,2;INT 21HPUSH CX;MOV AL,DIADD AL,30HMOV BL,02HMOV BH,0MOV CX,1MOV AH,9INT 10H/显示墨绿色字符MOV BH,0MOV AH,3INT 10H/取光标属性INC DLMOV AH,2INT 10H/置光标属性POP CX;DEC D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论