1汇编语言课程设计题目:系统时间显示学生姓名:学生学号:院(系):年级专业:指导教师:冯伟老师二〇一〇年12月2目录摘要.............................................................11.概述.............................................................21.1课程设计的目的................................................21.2设计要求......................................................22.总体方案设计.....................................................32.1主程序设计思想................................................32.2程序设计思想..................................................32.3部分模块说明..................................................43.详细设计........................................................53.1主程序流程图..................................................53.2DATE子程序流程图.............................................63.3TIME子程序流程图.............................................73.4程序清单.....................................................73.5运行程序....................................................123.6调试程序....................................................154.总结...........................................................155.参考文献.......................................................161摘要这个程序主要是用来显示系统时间的程序。在这个程序中,主程序首先设置显示方式,取系统时间后将时间保存,继续设置显示方式,利用BIOS的INT1AH的2号系统功能调用,将计算机系统的时间参数(BCD码)送入寄存器,将用BCD码表示的时、分、秒转换成ASCII码并进行显示。读字符串到al中进行判断是否为结束,然后进行显示时间。后又重新取系统时间。然后进行一系列的判断是否有进位。有则进行进位操作,否则重新取系统时间。关键字:系统时间,寄存器,ASCLL码,流程图21.概述1.1课程设计的目的对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。培养学生综合运用所学知识独立完成汇编程序课题的能力。使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。1.2设计要求用“时:分:秒”(均为两位)的形式连续显示系统时间。利用BIOS的INT1AH的2号系统功能调用,将计算机系统的时间参数(BCD码)送入寄存器,将用BCD码表示的时、分、秒转换成ASCII码并进行显示。32.总体方案设计2.1主程序设计思想此动画程序要求结构化的显示系统时间和日期。程序要求能多次执行以上两种操作并有退出选项。则我们可以设计三个选项以供用户选择:D-DATE、T-TIME和Q-退出程序。三个选项分别可以用三个过程实现其功能。用户在出现的提示信息中输入小写字母“D”,马上显示系统当前日期;输入小写字母“T”,马上显示系统当前时间;输入小写字母“Q”,则退出程序。2.2程序设计思想在DOS环境下完成,先利用BIOS功能调用中显示器驱动程序的00H类型调用,设置显示器的显示模式为80*25彩色。在屏幕中央显示提示信息(提示用户输入“D”或“T”或“Q”)。然后对用户输入的字母进行判断,利用分支程序分别调用不同的子程序。两个子程序的功能分别是显示当前日期(用2AH的DOS功能调用来取日期),显示当前时间(用2CH的DOS功能调用来取时间)。必须用到的DOS功能调用:取当前系统日期:功能号为2AH,返回值送入CX,DX寄存器中。取当前系统时间:功能号为2CH,返回值送入CX,DX寄存器中。例如:2009年5月31日运行的程序中,(1)使用2AH的DOS功能调用后,得到CX=07D9H,DX=051FH其中,CX中的数据为2009D,即年份。DX中的数据中可分析得:DH=05H=05D,即月份。DL=1FH=31D,即日期号。最后应将数据转换为其字符对应的ASCII码,即32H,30H,30H,39H,2DH,30H,35H,2DH,33H,31H再显示在屏幕上。即显示出:2009-5-3142.3部分模块说明1)其中主要对主程序和宏清屏命令进行了设计和编码,下面将分别对它们进行简要说明。主程序:CODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFARBEGIN:MOVAH,0;设置40*25图形显示MOVAL,3INT10HCLEAR_SCREEN00H,00H,19H,50HMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AX;*****************************显示宏定义*************************SHOWMACRObLEADX,bMOVAH,9INT21HENDMSHOWWELCOME;显示数据段的内容SHOWINF01SHOWINF02SHOWINF03SHOWINF04SHOWINF05SHOWINF06INPUT:MOVAH,01;键盘输入并回写INT21HCMPAL,44H;与D比较JNEL1;不相等转L15CALLDATEDISPLAY;相等调用DATADISPLAYJMPEXIT1L1:CMPAL,54H;与T比较JNEL2;不相等转L2CALLTIMEDISPLAY;相等调用TIMEDISPLAYJMPEXIT1L2:CMPAL,51H;与Q比较JEEXIT;相等转EXITSHOWINPUTER;显示输入错误SHOWINF05;显示输入提示JMPINPUTEXIT1:SHOWINF06;显示输入提示JMPINPUT;EXIT:MOVAH,4CH;结束INT21HMAINENDP主程序主要实现与用户的交互,首先程序会提示用户想要进行什么操作。是显示DATE,TIME还是退出。这里对应的给用户提供的选项是“D”、“T”和“Q”。当用户输入他们的选项之后,主程序要判断用户的输入调用相应的功能模块来满足用户的要求。我们假设用户输入字符为X,那么首先我们将X与“D”比较。如果相同则程序调用DATE_DISPLAY模块为用户显示日期。若不为“D”则要继续与“T”想比较。相等则调用TIME_DISPLAY模块,不等则继续与“Q”相比较。相等则正常退出,不等则说明用户输入非法字符主程序返回到选择界面用户可以继续选择。特别说明:汇编语言的选择结构不同于C语言的选择结构,程序设计过程中要特别小心。避免将造成潜在的BUG.3.详细设计3.1主程序流程图63.2DATE子程序流程图开始获取原中断类型1CH保存原中断类型设置新的中断类型执行中断处理程序保护现场中断返回读取系统时间保存原中断类型分别将时间的BCD码转换为字符在指定位置写显存以显示日期恢复现场NNYNY显示提示信息输入一个字符是否为’d’调用DATA调用TIME是否为’t’是否为’q’结束YN开始73.3TIME子程序流程图3.4程序清单程序代码:;************************清屏宏定义**********************CLEAR_SCREENMACROOP1,OP2,OP3,OP4;1MOVAH,06H;2MOVAL,00H;3MOVBH,79H;4MOVCH,OP1;5MOVCL,OP2;6MOVDH,OP3;7MOVDL,OP4;8INT10H;9MOVAH,02H;10开始获取原中断类型1CH保存原中断类型设置新的中断类型执行中断处理程序保护现场中断返回读取系统时间保存原中断类型分别将时间的BCD码转换为字符在指定位置写显存以显示时间恢复现场8MOVBH,00H;11MOVDH,00H;12MOVDL,00H;13INT10H;14ENDM;15STACKSEGMENTSTACK;16定义堆栈段DB200DUP(0);17STACKENDS;18DATASEGMENT;19定义数据段WELCOMEDB'WELCOMEYOUTOCOMEHERE!$';20提示界面INF01DB0DH,0AH,'THISISADISPLAYPROGAME!$';21INF02DB0DH,0AH,'PLEASEINPUTDTORQTOSHOWDATATIMEOREXIT!$'INF03DB0DH,0AH,'D:DISPLAYSYSTEMDATE;$';22INF04DB0DH,0AH,'T:DISPLAYSYSTEMTIME;$';23INF05DB0DH,0AH,'Q:QUIT.$';24INF06DB0DH,0AH,'PLEASEINPUTTHECHAR:$';25INPUTERDB0DH,0AH,'INPUTERROR!$';26DATEDISDB'00-00-0000',0AH,'$';27显示DATETIMEDISDB'00',3AH,'00',3AH,'00',0AH,'$';28显示TIMEDATAENDS;29CODESEGMENT;30代码段ASSUMECS:CODE,DS:DATA,SS:STACK;31;****************************主程序**************************MAINPROCFAR;32BEGIN:;339MOVAH,0;34设置40*25图形显示MOVAL,3;35INT10H;36CLEAR_SCREEN00H,00H,19H,50H;37MOVAX,DATA;38MOVDS,AX;39MOVAX,STACK;40MOVSS,AX;41;*****************************显示宏定义*************************SHOWMACROb;42LEADX,b;43MOVAH,9;44INT21H;45ENDM;46SHOWWELCOME;47显示数据段的内容SHOWINF01;48SHOWINF02;49SHOWINF03;50SHOWINF04;51SHOWINF05;52SHOWINF06;53INPUT:MOVAH,01;53键盘输入并回写INT21H;54CMP