日期时间汇编语言设计.docx
《日期时间汇编语言设计.docx》由会员分享,可在线阅读,更多相关《日期时间汇编语言设计.docx(13页珍藏版)》请在冰豆网上搜索。
日期时间汇编语言设计
前言
在程序的实现过程中,先在数据段开一段显示缓冲区,用来存储系统时间,调用子程序的清屏部分。
通过调用DOS中断,得到系统当前时间,并将其二进制转换成ASCII码。
目前DOS常用的9类中断(20H-27H和2FH)分为两种:
DOS专用中断和DOS可调用中断。
(1)DOS专用中断。
DOS专用中断是指INT22H、INT23H和INT24H三个中断,属于DOS操作时专用,用户不要直接使用。
INT27H和INT2FH六个中断。
这六个中断都直接供用户直接调用,但都必须要满足一定的入口条件。
(2)由于中DOS可调用中断。
DOS可调用中断是指INT20H、INT21H、INT25H、INT26H、断有很多中,本身就比较复杂,所以在这里只是简单的提一下,不做深入研究。
只对其中的INT10和INT21两种特别常见且应用广泛的在程序设计过程中结合程序加以说明。
中文摘要
本程序设计依托最基本的计算机语言---汇编语言。
通过汇编程序调用系统时间或日期。
首先调用DOS中断,得到系统当前时间或日期,并将其二进制转换成ASCII码,再调用DOS字符串显示功能将时间或日期以电子时钟的方式显示在显示器上。
意义在于能更好更快使时间、日期的程序得以实现。
使得时间、日期的显示程序更加精炼,更加准确。
关键字:
更好更快精炼准确
目录
1.系统总体设计1
2.详细设计2
2.1功能模块的分析2
2.2寄存器的移动方法2
2.3PUSH和POP的调用2
2.4S系统的调用2
3.系统测试4
4.程序清单5
设计总结11
参考文献12
致谢13
1.系统总体设计
(1)用汇编语言编写程序,使其能实现在PC机上用电子时钟时、分、秒的格式显示时间、日期的功能。
(2)调用DOS中断,得到系统当前时间、日期,并将其二进制转换成ASCII码。
(3)把程序设计成用刷新的方式来不断获取系统的时间、日期。
(4)获取键盘的按键值,以ESC键
图1-1系统功能模块图
2.详细设计
2.1功能模块的分析
由于获取了的系统时间或日期不会自动刷新,所以要设计成刷新的方式来不断获取系统的时间或日期,这样就形成了会跳动的电子钟或日期了。
时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,使得时间的显示程序更加精炼,使时间显示更加准确。
2.2寄存器的移动方法
在本次试验中需要注意基址寄存器BX的移动方法,对以字为单位的数组,BX的移动方式,是每移动一次加2或者减2。
2.3PUSH和POP的调用
函数调用的过程中需要小心PUSH和pop的调用是否安全,所以在调用函数时先得要进栈,然后才能出栈。
2.4S系统的调用
首先调用DOS中断,得到系统当前时间或日期,并将其二进制转换成ASCII码,再调用DOS字符串显示功能将时间或日期以电子时钟的方式显示在显示器上。
图2-1控制模块流程图
3.系统测试
(1)本程序可在windows98,windows2000,windowsxp上运行。
(2)打开DOS,进行运行,用鼠标点击工程lanxuan.EXE即可在masm615环境下运行该系统。
(3)在出现的提示信息中输入大写字母“D”,可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序。
程序运行截图:
图3-1日期
图3-2日期
4.程序清单
在出现的提示信息中输入大写字母“D”,可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序。
STACKSEGMENTSTACK
DW200DUP(?
)
STACKENDS
DATASEGMENT
SPACEDB1000DUP('')
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;设置显示方式为40*25彩色文本方式
INT10H
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVBP,OFFSETSPACE
MOVDX,0B00H
MOVCX,0000
MOVBX,0040H
MOVAX,1300H
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
MOVAH,4CH;返回dos状态
INT21H
DATEPROCNEAR;显示日期子程序
DISPLAY:
MOVAH,2AH;取日期
INT21H
MOVSI,0
MOVAX,CX
MOVBX,100
DIVBL
MOVBL,AH
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;延时
REPEA1:
LOOPREPEA1
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
设计总结
本次课程设计的内容是结合汇编语言的特点编写的程序。
程序设计成用刷新的方式来不断获取系统的时间或日期,这样就有了会一秒一秒走动的电子时钟。
由于获取了的系统时间或日期不会自动刷新,所以要设计成刷新的方式来不断获取系统的时间或日期,这样就形成了会跳动的电子钟或日期了。
为了使时间或日期显示更加准确,本程序还设计了一段较精确的时间延迟程序。
时间在运行中出现了不准确性,对程序的循环次调整后,时间能正常运行。
在设计和调试过程中的困惑和解决办法:
(1)BIOS功能调用INT10H:
在BIOS功能调用INT10H中,AH=02H(置光标位置)和AH=06H(当前显示页上滚),功能号AH=02H很好的解决了这个问题。
DH=光标所在行,DL=光标所在列,BH=光标所在页,三个入口参数控制了光标的位置。
(2)DOS功能调用:
(3)宏定义和过程调用:
使用宏定义和过程调用会使繁杂的程序容易读懂和解,也使写程序的思路清晰
参考文献
[1]彭虎等编著.微机原理与接口技术(第二版).北京:
电子工业出版社,2008
[2]沈美明,温东禅.IBM-PC汇编语句程序设计(第2版).北京:
清华大学出版社,2001
[3]任向明,卢惠林.汇编语言程序设计实用教程.北京:
清华大学出版社,2009
[4]马力妮.80x86汇编语言程序设计.北京:
机械工业出版社,2004
[5]艾德才.Pentium系列微型计算机原理与接口技术.北京:
高等教育出版社,2000
致谢
在这次课程设计的撰写过程中,我得到了许多人的帮助。
首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,尤其是要感谢辅导老师刘树群老师给我的帮助。
这是我能顺利完成这次报告的主要原因,老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计上的难题。
当然,在这次课程设计中,我也在网站上找了许多参考资料,也在图书馆借阅了一些参考书籍。
所以我也要谢谢提供这些资料和参考资料的作者们。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。