资源描述:
《微机原理与应用课程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、微机原理与应用课程设计题目:基于汇编语言的个性化时钟设计学院:01级信息工程学院专业:信息工程2班 名字:郑家喜学号:200107014238指导老师:李优新时间:2004-01-06第一部分思想与效果分析本程序的基本功能是能实时显示当前的时间和日期。在此基础上增加一些个性化的设置,如能实现秒表的功能,优化操作界面,如增加一些闪烁的星星和飞行的字母,还有一些简单的键盘控制界面等等。只要在DOS环境下,运行CLOCK.EXE命令,即可进入时钟界面。当按下ESC键时,就弹出一对话框,询问你是否确定真的要退出,按Y键即可退出,按N键就继续显示时钟
2、界面。程序要用到基本的DOS和BIOS的中断指令以及简单的条件转移和循环语句,以及子程序的调用和基本的汇编指令。第二部分工作原理与程序结构1.工作原理:本程序用到的中断有:键盘输入(INT 16H)的读键盘功能(AH=0),判断有无键入(AH=1),DOS系统功能(INT 21H)的取时间功能(AH=2CH),BIOS系统功能的读写时钟参数(INT 1AH)的读日期功能(AH=4),屏幕显示(INT 10H)的置光标位置(AH=2),上滚当前页(AH=6),写字符及属性到当前光标位置外(AH=9).同时也用到比较多的子程序调用,比如CLR_
3、SCREEN,DISPLAY,DELAY等。之所以采用子程序调用,是为了使主程序简洁,可读性高,执行速度快。还有大量使用条件转移指令,实现选择功能,以及码制的转换。2.程序的结构如下:(1).首先定义数据段和附加段,进入代码段。先执行一个飞行的字母“PersonalClock”,接着是定义各个板块的背景颜色,判断有无读键盘输入,如何有的话,则读键盘输入。如果是ESC键,整个程序将跳到Exit处,程序将会询问“Doyouwanttoquit(y/n)?”,按下y,程序结束返回DOS的同时会显示几行语句;按下n,程序将重新回到开始处。(2).如
4、果按得不是ESC键,程序将执行中断INT21H(AH=2CH),读取时间(其中要把读取的二进制码转换成能显示的ASCII码),然后执行读写时钟参数(INT 1AH)的读日期功能(AH=4),其中也要把BCD码转换成ASCII码。(3).接着就是显示时间,日期,同时也各自用到CLR_SCREEN,DISPLAY子程序的调用。其中CLR_SCREEN则用到屏幕显示(INT 10H)的置光标位置(AH=2),上滚当前页(AH=6)。然后显示“PersonalClock”的文本信息选择,最后显示闪烁的星星,此时用到的中断是屏幕显示(INT 10H)
5、的写字符及属性到当前光标置(AH=9),在此之后就一直循环。第三部分程序清单;PROGRAMTITLEGOSEHERE--COMPARESTRINGdatareasegmenttemp1dw?temp2dw?buffer0db?led1db?led2db?led3db?led4db?led5db?led6db?led7db?led8db?led9db?led10db?led11db?led13db?led14db?led15db?led16db?led17db?led18db?led19db?led20db?led21db?led22db?
6、R0db?slogandb13;moveslogandb50h,13,0,0;Pdb65h,13,0,1;edb72h,13,0,1;rdb73h,13,0,1;sdb6fh,13,0,1;odb6eh,13,0,1;ndb61h,13,0,1;adb6ch,13,0,1;ldb43h,13,0,2;Cdb6ch,13,0,1;ldb6fh,13,0,1;odb63h,13,0,1;cdb6bh,13,0,1;kchar_cntdw?pointerdw?line_ondb?col_ondb?datedb10dup(?)timedb10dup
7、(?)message1db'PersonalClock'message2db'Doyouwanttoquit(y/n)?'message3db'Disigner:OwenChan'message4db'Instrutor:Liyouxin'message5db'@2004InformationFacultyofGuangDongUniversityofTechnonlgy.'message6db'Allrightsreserved.';datareaends;-----------------------------------------
8、-------------------------------------videosegmentat0b800h;defineextrasegmentwd_bufflabelw