汇编语言 显示系统日期时间.docx
- 文档编号:24282269
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:15
- 大小:72.79KB
汇编语言 显示系统日期时间.docx
《汇编语言 显示系统日期时间.docx》由会员分享,可在线阅读,更多相关《汇编语言 显示系统日期时间.docx(15页珍藏版)》请在冰豆网上搜索。
汇编语言显示系统日期时间
学号:
201040410213
课程设计
题目
显示系统日期时间程序设计
教学院
计算机学院
专业
计算机科学与技术
班级
2班
姓名
杨琛
指导教师
姚莉
2012
年
6
月
10
日
目录
一概述1
1.1课程设计的目的1
1.2课程设计的要求2
二总体方案设计2
三详细设计4
3.1程序流程图4
3.2时间显示程序代码5
四程序的调试与运行结果说明10
4.1程序运行结果10
五课程设计总结12
参考文献14
一概述
1.1课程设计的目的
1.理解和掌握该课程中的有关基本概念,程序设计思想和方法。
2.培养综合运用所学知识独立完成课题的能力。
3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
5.掌握利用单片机接口技术解决问题的基本方法。
6.掌握和理解对知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力。
1.2课程设计的要求
1.查阅相关资料,自学具体课题中涉及到的新知识,能够按照老师的要求对待设计的系统的程序流程图进行正确地绘制。
3.在老师的指导下,能够写出相应的源程序代码,采用结构化、模块化程序设计方法,功能要完善,界面要美观。
4.所设计的系统原则上要能够运行无误,结果准确。
在条件允许的情况下,能够最终将系统所要实现的功能演示出来。
二总体方案设计
通过主函数中调用2种宏和2种功能函数分别为调用系统时间的函数和调用系统日期函数来实现全部显示系统时间和日期。
功能宏和函数如下:
宏1:
CLEAR_SCREENMACRO:
它实现了清屏和修改界面属性的功能,使界面更美观。
宏2:
SHOWMACRO:
它实现了显示定义在数据段中的字符串的功能,也就是显示提示语句。
函数1:
DATEDISPLAY:
它实现了显示日期的功能。
函数2:
TIMEDISPLAY:
它实现了显示时间的功能。
函数EXIT:
函数来退出程序。
在程序设计中我承担的是系统时间显示的程序设计,通过被主函数调用来显示系统时间。
程序中分别用CH,CL,DH来存放时分秒,来传入并显示系统时间。
三详细设计
3.1程序流程图
图1;程序流程图
3.2时间显示程序代码
STACKSEGMENTSTACK
DW200DUP(?
)
STACKENDS
DATASEGMENT
SPACEDB1000DUP('')
STR1DB40DUP(''),9DUP(''),'WELCOMETOTIMEMASTER!
',52DUP('')
DUICHUDB240DUP(''),9DUP(''),'THANKYOUVERYMUCH!
',412DUP('')
PATTERNDB6DUP(''),0C9H,26DUP(0CDH),0BBH,6DUP('')
DB6DUP(''),0BAH,26DUP(20H),0BAH,6DUP('')
DB6DUP(''),0C8H,26DUP(0CDH),0BCH,6DUP('')
DBUFFERDB8DUP(':
'),12DUP('')
DBUFFER1DB20DUP('')
STRDB0DH,0AH,'PLEASEINPUTDATE(D)ORTIME(T)ORQUIT(Q):
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,0001H
INT10H;设置显示方式为40*25彩色文本方式
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVBP,OFFSETSPACE
MOVDX,0B00H;0B00
MOVCX,1000
MOVBX,0020H
MOVAX,1300H
INT10H
MOVBP,OFFSETSTR1;显示'WELCOMETOTIMEMASTER!
'
MOVDX,0600H
MOVCX,120
MOVBX,000EH
MOVAX,1301H
INT10H
MOVBP,OFFSETPATTERN;显示矩形条
MOVDX,0B00H
MOVCX,120
MOVBX,004EH
MOVAX,1301H
INT10H
LEADX,STR;显示提示信息
MOVAH,9
INT21H
MOVAH,1;从键盘输入单个字符
INT21H
CMPAL,44H;AL='D'?
JNEA
CALLDATE;显示系统日期
A:
CMPAL,54H;AL='T'?
JNEB
CALLTIME;显示系统时间
B:
CMPAL,51H;AL='Q'?
JNESTART
MOVBP,OFFSETDUICHU;显示'THANKYOUVERYMUCH!
'
MOVDX,0600H
MOVCX,520
MOVBX,004EH
MOVAX,1301H
INT10H
MOVAX,4C00H;返回dos状态
INT21H
DATEPROCNEAR;显示日期子程序
DISPLAY:
MOVAH,2AH;取日期
INT21H
MOVSI,0
MOVAX,CX
MOVBX,100
DIVBL
MOVBL,AH;AH=12AL=20
CALLBCDASC1;日期数值转换成相应的ASCII码字符
MOVAL,BL
CALLBCDASC1
INCSI
MOVAL,DH
CALLBCDASC1
INCSI
MOVAL,DL
CALLBCDASC1
MOVBP,OFFSETDBUFFER1
MOVDX,0C0DH
MOVCX,20
MOVBX,004EH
MOVAX,1301H
INT10H
MOVAH,02H;设置光标位置
MOVDX,0300H
MOVBH,0
INT10H
MOVBX,0018H
REPEA:
MOVCX,0FFFFH;延时
REPEAT:
LOOPREPEAT
DECBX
JNZREPEA
MOVAH,01H;读键盘缓冲区字符到AL寄存器
INT16H
JEDISPLAY
JMPSTART
MOVAX,4C00H
INT21H
RET
DATEENDP
TIMEPROCNEAR;显示时间子程序
DISPLAY1:
MOVSI,0
MOVBX,100
DIVBL
MOVAH,2CH;取时间
INT21H
MOVAL,CH
CALLBCDASC;将时间数值转换成ASCII码字符
INCSI
MOVAL,CL
CALLBCDASC
INCSI
MOVAL,DH
CALLBCDASC
MOVBP,OFFSETDBUFFER
MOVDX,0C0DH
MOVCX,20
MOVBX,004EH
MOVAX,1301H
INT10H
MOVAH,02H
MOVDX,0300H
MOVBH,0
INT10H
MOVBX,0018H
RE:
MOVCX,0FFFFH
REA:
LOOPREA
DECBX
JNZRE
MOVAH,01H
INT16H
JEDISPLAY1
JMPSTART
MOVAX,4C00H
INT21H
RET
TIMEENDP
BCDASCPROCNEAR;时间数值转换成ASCII码字符子程序
PUSHBX
CBW
MOVBL,10
DIVBL
ADDAL,'0'
MOVDBUFFER[SI],AL
INCSI
ADDAH,'0'
MOVDBUFFER[SI],AH
INCSI
POPBX
RET
BCDASCENDP
BCDASC1PROCNEAR;日期数值转换成ASCII码字符子程序
PUSHBX
CBW
MOVBL,10
DIVBL
ADDAL,'0'
MOVDBUFFER1[SI],AL
INCSI
ADDAH,'0'
MOVDBUFFER1[SI],AH
INCSI
POPBX
RET
BCDASC1ENDP
CODEENDS
ENDSTART
四程序的调试与运行结果说明
4.1程序运行结果
图2程序运行显示日期的结果
图3程序运行显示当前时间的结果
图4程序退出时的结果
程序中跳出界面窗口提示,在出现的提示信息中输入大写字母“D”即显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”即结束程序,输入错误,则重新输入。
五课程设计总结
根据设计要求,这个程序基本实现所要求的功能。
但由于短暂的设计时间和过于零散的汇编知识暴露出许多不足之处,如我们显示的时间是静态的,不能动态显示连续的时间,界面太过单调。
但是程序也有他相对的特点如冗余低,能判断是否输入错误,和对应的时间和日期的大小写输入。
设计要求完成一个显示系统当前日期和时间的汇编程序。
即通过输入键盘上某个按键来显示系统的日期和时间或者退出程序。
(如:
在出现的提示信息中输入大写字母“D”或者“d”即显示系统当前日期;输入大写字母“T”或者“t”,可显示系统当前时间;输入大写字母“Q”或者“t”即结束程序。
)所以在程序的开始,就已经先定义了清屏上卷宏定义,制定了光标位置。
考虑到程序中多次要显示字符串,所以将显示字符串也作为一个宏定义,避免了代码冗长。
在整个程序中,只有两个重要子程序,分别为日期显示子程序和时间显示子程序。
而在程序编写的过程中我们遇到了许多的问题,如:
如何用汇编语言取系统日期和系统时间和怎么显示出来,为了防止代码太冗长,我们选择用子程序来显示相应的字符串和界面指令。
在编写日期显示子程序时,先取CX中存的系统当前日期,存在AX中,作为被除数,除以10,给各位加上30H,变为它的ASCII码。
使存日月的DX入栈,以保护日月。
指针指向DATEDIS字符串的最后一位,即年的最后一位,循环4次,将年的ASCII码依次放入字符串DATEDIS'00-00-0000'的‘0000’位,随后DX出栈还原。
取DL中存的日,放入AL中,将高位AH清零,AX作为被除数,重复转换ASCII码的步骤,指针减4,指向字符串DATEDIS'00-00-0000'的日的第一位,将转换后的日的ASCII码放进‘00’位。
接着取DH中的月,重复日的步骤,直到将月放进字符串。
然后调用显示宏定义,将转换后的日期显示出来。
在显示月的子程序中,在AX除以BL之后,即执行DIVBL,其商送AL,余数送AH,如6月存放与DH中,除以BL之后,商为0,余数为6。
分别存放在AL和AH之中,加上3030H之后,AX中的内容为3630H。
由于定义DATEDIS为字节型,故存放时30H存放在低字节,36H存放在高位字节,显示时,‘0’字符在第一个显示,‘6’字符在第二个显示,才会显示‘06’。
所以,SI指针应指向第一个‘0’,即第一个字节空间。
同理,显示日和时间的时候也需要注意出现这种情况。
在显示完日期,时间后,若要退出系统,则只能按Q退出,按其他键不起用。
做这个程序的过程中,我加深了对某些指令的理解,如push,pop,jmp指令。
本次实验,我觉得最大的收获便是慢慢学会了独立思考问题及解决问题,并且最终将自己的想法通过程序代码来实现,我感觉这是对自我的一种突破。
乍一看到这个题目,感觉挺简单啊,不就是用一个字符和规定的三个字符相比较,分别调用子程序么?
可是真正在编写程序的过程中,才发现想的容易,写起来却是另一会事,正如杜甫所说的“书到用时方恨少,事非经过不知难。
”其实对于这种情况,我们极容易犯眼高手低的毛病,这就导致我们失去了多次自己动手操作实践的机会,一味的只是看老师演示演示再演示。
通过这次试验,我知道了在以后的学习过程中,一定要自己去实践,在实践中能得到更加深刻的认识和体会,对知识能够更好更深刻的掌握。
参考文献
[1]沈美明,IBM-PC汇编语言程序设计(第二版),北京,清华大学出版社,2010年9月。
[2]刘丽莉,汇编语言程序设计(第一版),北京,北京大学出版社,2010年11月。
[3]白小明,汇编语言程序设计,北京,中国铁道部出版社,2009年8月。
[4]布鲁姆,ProfessionalAssemblyLanguage,北京,机械工业出版社,2006年1月。
[5]苏帆,汇编语言程序设计,北京,北京航空航天大学出版社,2005年2月。
[6]王爽,汇编语言(第二版),北京,清华大学出版社,2008年4月。
[7]欧文,Intel汇编语言程序设计(第五版),北京,电子工业出版社,2007年9月。
[8]罗云彬,琢石成器:
Windows环境下32位汇编语言程序设计(第一版),北京,电子工业出版社,2009年6月。
[9]杨季文,80x86汇编语言程序设计教程,北京,清华大学出版社。
[10]廖建明,汇编语言程序设计(第一版),北京,清华大学出版社,2009年10月。
[11]卓拉,计算机组成及汇编语言原理(第一版),北京,机械工业出版社,2010年1月。
汇编语言课程设计成绩评定表
姓名
杨琛
性别
男
专业班级
10计算机科学与技术
(2)班
课程设计题目:
显示系统日期时间程序设计
课程设计答辩或质疑记录:
(手写部分)
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 显示系统日期时间 显示 系统 日期 时间