版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息科学与技术学院微机原理与接口技术课程设计题目名称:电子万年历学生姓名:湛开洪学 号:2009082191专 业:计算机科学与技术班 级:09级(1)班指导教师:裘祖旗完成日期:2012年 1 月 11日目录目录一、课程设计要求3二、程序流程图4三、程序主要功能模块41.画出该程序的界面52.写出所有非汉字字符53.写出汉字字符64.填充公历及农历的信息65.用户输入一个需要显示的新日期7四、主要技术路线81.开发工具82.主要算法83.重要指令10五、系统的难点及解决方案111.算法112.由思想到程序的转换11六、总结与体会13七、参考文献14附录(源程序)15万年历一、课程设计要求DO
2、S 下万年历(8086 汇编)DOS 运行的日历,支持农历:1 a. 能实现计时功能2 显示年、月、日、进、分、秒、星期扩展功能:实现公历与阴历转换二、程序流程图三、程序主要功能模块本万年历程序正确实现从1901年1月1日至2050年12月31日的公历与农历查询,包括公历年,月,日,星期,农历干支年,月,日。本程序共有一个主过程,二十个子过程,73个标号,1460行,27185字,主要分成以下五大模块:1.画出该程序的界面A.功能及不足:在该模块的设计中,主要令其实现程序的界面,即该万年历程序的边框部分。由于该程序做的比较仓促,界面设计相对简单,我只是框出一个7*7的矩形区域,每个小区域都是3
3、*3(像素大小为48*48)大小的。其中第一行用于显示星期信息(日,一,),以下六行用于分别在相应位置显示一整个月的月历。B.子过程:SETMODE:设置显示模式至INT 10H(AH=00H,AL=12H)的640*480图形16色模式CLEAR:清屏函数,实现将屏幕上卷一屏的功能WRITEROW:画出程序主体框架的所有横线WRITECOL:画出程序主体框架的所有竖线2.写出所有非汉字字符A.功能及不足:在该模块设计中,主要在界面中填充非汉字字符,包括标题部分,版权部分,月历部分,月历标题部分和提示输入部分。我们知道,月历中每行最多显示7天,而第一行要显示的天数是由该月1日的星期数来决定的,
4、而每个月又有可能有28,29,30,31天,这样,导致输出的月历中,有可能是5行,也有可能是6行,而我为了简化程序的流程直接准备了6行的空白来填充公历的月历,这就有可能导致有的时候,画面中最后一行是空白的,影响显示效果。B.子过程:WRITECHAR:使用INT 21H(AH 13H)功能,在图形模式下显示字符串WRITENORMAL:调用WRITECHAR子过程,显示所有非汉字字符串COVTITLE3:用于将年月日的信息转换成可以输出的字符串3.写出汉字字符A.功能及不足:在该模块设计中,主要实现汉字字符的显示,包括星期的标题,公历和农历的提示,公历的“年”“月”“日”的提示,农历年月日信息
5、的显示。由于在原来的设计中,我打算在月历中的每一个日期下面都输出它的农历日期,所以在模块1中画了较大的矩形框,分配给每个日期3*3的矩形。而在实际代码实现时,我才了解输出汉字是多么的烦琐,故索性将农历汉字的输出改为只是用户所输入的那个日期。所以,可以看到,我的界面在中间部分显得很松散,而右边,集中了好多的信息,而且我没有仔细的设计输出的格式,有的情况下,可能汉字的显示位置会比较难看。B.子过程:WRITECCHAR:使用INT 10H(AH 0CH),利用汉字字模来输出一个汉字WRITEABNORMAL:调用WRITECCHAR子过程,来输出星期提示WRITELUNARDATA:调用WRITE
6、CCHAR子过程,来输出农历信息4.填充公历及农历的信息A.功能及不足:在本模块设计中,主要实现了农历数据数据结构的填充,包括该日期对应的农历年份,即天干地支;农历的月份,包括该月是否是闰月的信息;农历的日期。其中,农历年的计算相对简单,而农历月日的计算相对比较烦琐,农历信息的数组我是在网上找的,所以不保证全部的正确性,但在所有我测试过的关键日期上,结果是完全正确的。B.子过程:GetWeekDay:得到该日期的星期信息IsLeapYear:判断该年份是否是闰年GetMonthDays:得到该日期所在月份的总天数GetBetweenDays:得到给定的两个日期之间所差的天数GetLunarYe
7、arDays:得到一个农历日期所在年份的总天数GetLunarMonthDays:得到一个农历日期所在月份的总天数GetLunarData:该过程调用上面一个子过程,填充好农历所有的数据结构5.用户输入一个需要显示的新日期A.功能及不足:该模块提供用户输入的基本功能,由于本程序是图形模式,故输入的实现麻烦些,包括基本按键后在屏幕上回显所按的键,按BackSpace退格,按Esc键退出程序。还是由于时间问题,我处理了了当用户输入不足8位时这个异常,方法是将年月日初始化为1901年1月1日;而用户在输入过程中按了非法的年月日信息,或者按了除0-9之外的按键这种异常,我并没有处理。在程序运行过程中可
8、能产生问题。B.子过程:INPUT:使用INT 21H(AH=08H)功能,判断用户输入,然后调用WRITECHAR子过程将用户输入回显在屏幕上,并将用户输入存在一个8位长度的字符串中以备计算新的年月日信息INITINPUT:在每次以新的年月日信息重新运行该程序时,我发现在用户输入区域还是会显示用户上一次输入的内容,然后每次用户按一个键,才会更新一个字符,看起来很不舒服。所以我设计了这个函数,在每次重新运行程序时,会清空供用户输入的区域COVINPUT:用于将用户输入的8位字符串由ASCII码转换为相关的年,月,日这三个变量,以备计算之用四、主要技术路线1.开发工具输入工具:Notepad+
9、v4.1编译器:MASM v5.0连接器:TLINK2.主要算法A.我国现行的公历和农历简介:公历每年有12 个月,其中1、3、5、7、8、10、12 月为大月,每月31 天;4、6、9、11 月为小月,每月30 天。公历有闰年平年之分,若某年是闰年,则该年2 月有29 天,全年有366 天;若某年是平年,则该年2 月有28 天,全年有365 天。农历一般全年有12 个月,如果出现闰月则全年就有13 个月。大月30 天,小月29 天,大小月出现月份不确定。B.本程序基本数据结构简介:由于公历信息每年基本不变,而农历信息每年变化很大,因此,我将全部年份的农历信息存储在两个基本的数据表里,当综合两
10、个表的信息时,可以得到与某年农历有关的所有数据:该年年份(由在数组中的偏移量来确定)、该年各月的大小(大月记1小月记0)、该年有无闰月以及闰月的月份(直接记录月份的大小)、该年有无闰月及闰月的大小(无闰月及闰月为小月记0为大月记1)。a)基本数据表一在基本数据表一里笔者用4位十六进制数D3D2D1D0(两个字节)描绘某一农历年的信息,其中每位十六进制数又可以用4 位二进制数(b3b2b1b0)表示。下面以一个具体的例子来说明基本数据表一里的数据格式,该数据是表一中2007年农历的基本信息:D3D2D1 的二进制形式表示该农历年各月(依次从1月到12 月)的大小,1代表大月即30天,0代表小月。
11、本例中十六进制D3D2D1为二进制1011 1011 0111,代表1、3、4、5、7、8、10、11、12 月为大月,其余月为小月。D0表示闰月出现的月份,从0001 到1100 分别代表闰月出现在12 个月中从一到十二月的某月,0000 表示没有闰月,从1101 到1111 空余。本例中0111 表示该年7月有闰月。b)基本数据表二在基本数据表二里,我用1bit来表示每一年中闰月的大小,0为无闰月或该年闰月天数为小月29天,1为该年闰月天数为大月30天。因为我存储了从1900年至2050年间的农历信息,故一共需要(2050-1900+1)/8 +1=19 bytes。C.实现公历到农历的转
12、换要实现公历到农历的转换,必须知道需要转换的公历年月日的具体信息,再运用基本数据表一,二里的数据,就可以得到该公历日期对应的农历年月日的具体信息。具体算法如下:我们欲先知道1901年1月1日为农历1900年11月11日,故在算法开始,我们假定需要计算的日期的农历为1900年11月,并计算出给定的公历日期距1901年1月1日的日数x,我们先暂时赋农历日为x,然后再逐级计算。A)首先,检查x是否大于19,若小于,则证明所查日期在1901年1月19日之前,可得到最后的结果:农历年=1900,农历月=11,农历日=x+11,跳转到步骤E。若x大于19,则x-=18,农历月+(农历月=12),跳转到步骤
13、B。B)再检查x是否大于31,若小于,则证明所查日期在1901年1月20日到1901年2月18日之间,可得到最后的结果:农历年=1900,农历月=12,农历日=x,跳转到步骤E。若x大于31,则x-=31,农历年+(农历年=1901),农历月=1,农历日=1,跳转到步骤C。C)然后,计算当前农历年的日数y,若x>y,则证明所查日期的年份一定大于这一农历年,故x-=y,农历年+,再次执行步骤C。若x<y,则证明所查日期的农历年就是当前用于计算的农历年,跳转到步骤D。D)接下来,原理同步骤C,计算当前农历月的日数y,若x>y,则证明所查日期的月份一定大于这一农历月,故x-=y,农
14、历月+,再次执行步骤D。若x<y,则证明所查日期的农历月就是当前用于计算的农历月,同时检查闰月情况,跳转到步骤E。E)至此可得,农历年=当前农历年,农历月=当前农历月,农历日=x+当前农历日。接下来计算农历年的干支表示。我们知道干支组合一共60种,经统计信息可知,我们将(农历年+56)%60得到的结果,正好可以得到该年的干支序号,即甲子=0,乙丑=1,依次类推。下面我举个具体的例子来说明上述算法。以今天的日期即2007-6-8为例,可容易的知道公历年=2007,公历月=6,公历日=8。经计算,该日期与1901年1月1日相差38874天,故会依次执行A-B-C,然后当当前农历年=2007,
15、x=110时,由于 x<2008年的总天数,故跳转到步骤D。当当前农历月=4,x=22时,由于 x<5年的总天数,故跳转到步骤E。(2007+56)%60=23,得到天干=(23+1)%10=4,即丁;得到地支=(23+1)%12=0,即亥。综上分析,得到2007-6-8的农历信息为丁亥年四月二十三。3.重要指令运用基本8086汇编指令,包括:A.通用数据传送指令:MOV,PUSH,POPB.地址传送指令:LEAC.算术指令:a)加法:ADD,ADC,INCb)减法:SUB,SBB,DEC,CMPc)乘法:MULd)除法:DIVD.逻辑指令:AND,OR,XOR,TEST,SHL,
16、SHR,STOS(REP),E.控制转移指令:JMP,JZ,JNZ,JE,JNE,JB,JA,LOOP,CALL,RET,INTF.标志处理指令:CMC进位位求反指令五、系统的难点及解决方案1.算法关于万年历,我们可以说再熟悉不过,但是真正到了自己动手和动脑去写的时候,才发现它里面其实有很复杂的数据结构。由于农历中每月的天数是不固定的,所以每年的天数也是不固定的,加之闰月的机制,使计算农历根本无法可寻。经由我在网上的苦苦搜索,终于发现原来农历的信息都是由专家事先计算好的,然后发布出来供大家使用,所以,想要知道哪一年的农历信息,程序中必须存储该年的全部信息。所以,我设计了如前面所阐述的那样的数据
17、结构来实现这样的目的。2.由思想到程序的转换我想通了农历的主要算法后,便开始着手程序的实现。根据我所设想的流程图,画出边框,输出标题,提示等信息都顺利实现。A.在输出公历信息时,因为万年历是要显示某一个月的一整月的信息,所以遇到的第一个问题便是该月的一日应该输出在屏幕的哪里,而这是由该月一日的星期数来决定的。所以我设计了一个子过程来计算某一公历日期的星期数,每次以该年该月的一日调用,从而确定公历的显示位置。B.第二点问题是汉字的显示。如果说在文本模式下,显示汉字应该是在字库里找到相应汉字的字模,然后用该汉字字模替代西文的字模,那么,由于本程序是在图形模式下运行的,所以我需要采取另外一种方式来显
18、示汉字。查看了许多资料以后,我终于明白,在图形模式下汉字可以看成是由16*16=256个像素点组成的,每个像素点可以是显示或不显示,然后该幅图片一样的像素区域会是看起来组成了一个汉字。举个例子,汉字“甲”,在图形模式下可以看成: 我们看到黄色的部分组成了这个汉字,正如我所标示的位号,每一行16个像素,可以由2bytes表示,共16行,即共2*16=32bytes,黄色部分的bit存为1,背景部分的bit存为0,这样,得到这个字的字模为:00H,08H,3FH,FCH,21H,08H,21H,08H,21H,08H,3FH,F8H,21H,08H,21H,08H,21H,08H,3FH,F8H,
19、21H,08H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H。 想要输出这个汉字时,我们定义一个打16*16个像素点的循环,每打16个点便开始打下一行,然后像素点是依据汉字字模该位是否是1来确定的,是1就打,是0就直接检验下一位,不打点。这样,当运行程序时,屏幕相应位置的16*16像素区域就会有汉字了,如下图所示,当前面那个图像缩小到屏幕上显示时,会很好的近似为 ,即成为“甲”字。C.与用户交互的设计 由于实现了框架,公历,农历汉字的显示之后,下一个功能是提供用户输入新的公历年月日,然后显示新的公历,农历信息,那么,我接下来需要考虑的是怎样使用户很方便和舒适的
20、和本程序进行交互。再一次注意到本程序是图形模式,无法利用系统提供的光标或者输入显示中断,这样,判断键盘输入并回显,成了又一个重要的问题。我的解决方法是,调用BIOS的中断,判断用户输入但不回显,再利用DOS的中断将键盘缓冲区中的内容输出在屏幕上。然后,我发现,这样的方法并没有实现BackSpace和Esc键,给用户输入带来很大不便。这样,我又加了几个判断语句,使这个输入更接近于系统所提供的输入方式。但依旧存在的一个问题就是,用户不可以在屏幕上已经没有自己输入的字符了的情况下再按BS键,不然程序会出错,因为我并没有处理这个异常,这是这个程序的一个遗憾吧。六、总结与体会微机接口技术是一门应用性、综
21、合性、实践性都较强的课程,通过本次课程设计过程,我基木熟悉和掌握了微机系统的软件、硬件设计的方法、设计步骤,是一次微机开发应用方面的初步训练;通过本次课程设计使我熟练掌握了微机系统与接口扩展电路的设计方法,并熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法. 这次的课程设计对我来说,是一次非常重要的锻炼,通过这次设计,我对所学的知识有了更深刻的了解和掌握,使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能
22、力。有了这次的设计经验,相信在以后的学习设计实践过程中,我可以做到更好。 回顾此次课程设计的过程,可以用“累并收获着”来概括。通过本次设计,不但使我的专业知识得到巩固和开拓,而且能使我将所学与实践联系起来,认识到自身知识的缺漏,明确自己的努力的方向。计算机技术的发展日新月异,其接口技术应用十分广泛,我不但要经常跟踪专业新技术、新动态,时刻走在时代的前列;还要注重积累经验,在此次设计中,积累一些通用俗语,才能使自己慢慢地融入专业之中,更快地进入工作角色:此外,还要注重养成终身的学习习惯,扩大自己的知识面,才能促进自己不断进步。七、参考文献1.戴梅馨,史嘉权编著.微型计算机技术及应用(第三版)北京
23、:清华大学出版社,2003 2.李顺增,吴国东,赵河明等.微机原理及接口技术北京:机械工业出版社,2006 3孙德文.微型计算机技术高等教育出版社 4.赵明富.黄丽雯,李文杰.微机原理及接口技术实验重庆工学院电子信息与白动化学院 5侯伯亨,李伯成微机原理与接口技术西安电子科技大学出版社附录(源程序)DATA SEGMENTTOU DB '* CALENDAR *$' DB ' YEAR: TIME: $'PASS DB 'Please input the user name:$' DB 'Please input the password
24、:$'STR3 DB 'zhan' ; 用户名COUNT1 EQU $-STR3STR4 DB '525' ;密码COUNT2 EQU $-STR4BUF4 DB 'ERROR!$'BUF5 DB 'ERROR!$'RILI DB 'SUN MON TUE WED THU FRI SAT * SUN MON TUE WED THU FRI SAT$'YUE1 DB'Jan$'YUE2 DB'Feb$'YUE3 DB'Mar$'YUE4 DB'Apr$&
25、#39;YUE5 DB'May$'YUE6 DB'Jun$'YUE7 DB'Jul$'YUE8 DB'Aug$'YUE9 DB'Sep$'YUE10 DB'Oct$'YUE11 DB'Nov$'YUE12 DB'Dec$'YEAR DW ?MONTH DW ?B DW ?C1 DW 0D1 DW 0E DW 0G DB 0T DW 0S DB 0P DW ?N DW 0Y DW 0M DW 0A1 DW 0 ;YUE子程序传递参数 A2 DW 0A3 DW 0A4 D
26、B 0BUF1 DB 31,?,31,30,31,30,31,31,30,31,30,31BUF2 DB 1,2,3,4,5,6,7,8,9,10,11,12INPUT3 DB 'NOT LEAP YEAR!$'INPUT4 DB 'LEAP YEAR$'INPUT5 DB ' 1.GO ON 2.QUIT$'STR5 DB 5 DB 0 DB 5 DUP(0)STR6 DB 3 DB 0 DB 3 DUP(0)BUF3 DB ' 1',0AH,0DH,'$' DB ' 2',0AH,0DH,
27、9;$' DB ' 3',0AH,0DH,'$' DB ' 4',0AH,0DH,'$' DB ' 5',0AH,0DH,'$' DB ' 6',0AH,0DH,'$' DB ' 7',0AH,0DH,'$' DB ' 8',0AH,0DH,'$' DB ' 9',0AH,0DH,'$' DB '10',0AH,0DH,'$' DB
28、'11',0AH,0DH,'$' DB '12',0AH,0DH,'$' DB '13',0AH,0DH,'$' DB '14',0AH,0DH,'$' DB '15',0AH,0DH,'$' DB '16',0AH,0DH,'$' DB '17',0AH,0DH,'$' DB '18',0AH,0DH,'$' DB '19'
29、,0AH,0DH,'$' DB '20',0AH,0DH,'$' DB '21',0AH,0DH,'$' DB '22',0AH,0DH,'$' DB '23',0AH,0DH,'$' DB '24',0AH,0DH,'$' DB '25',0AH,0DH,'$' DB '26',0AH,0DH,'$' DB '27',0AH,0DH,
30、9;$' DB '28',0AH,0DH,'$' DB '29',0AH,0DH,'$' DB '30',0AH,0DH,'$' DB '31',0AH,0DH,'$'F DB ?D DB ?STR1 DB 20 DB 0 DB 20 DUP(0)STR2 DB 20 DB 0 DB 20 DUP(0)DBUFFER DB 8 DUP (':'),12 DUP (' ') ;调用系统时间子程序中变量 F_NUM DW ? ;打印
31、参数 CERROR DB 'CREAT ERROR !',0AH,0DH,'$'WERROR DB 'WRITE ERROR !',0AH,0DH,'$'PLEASE DB 'PLEASE INPUT:',0AH,0DH,'$'NOSPACE DB'NO SPACE!',0AH,0DH,'$'F_NAME DB 'E:DAYIN.DOC',0BUFIN DB 32767 DUP(?)DATA ENDSSTACK SEGMENT DB 200 DUP(0
32、)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AH,0 ;设置显示方式 MOV AL,3 ;80*25彩色文本方式 INT 10H ;*用户名,密码程序* MOV AH,6 MOV AL,0 MOV CH,0 MOV CL,0 ;清整个屏幕 MOV DH,24 MOV DL,79 MOV BH,33 INT 10H MOV CX,2 ;显示用户名的密码页面,共2行,循环输出2次 MOV SI,OFFSET PASS MOV B,0
33、50EHLOPPASS:MOV AH,2 ;定光标位置 MOV BX,1 MOV DX,B INT 10H ADD DX,0500H MOV B,DX MOV DX,SI ; 显示字符串 MOV AH,9 INT 21H ADD SI,28 DEC CX JNZ LOPPASS MOV F,3 ;容错三次LOP1: MOV AH,2 ;设置用户名光标位置 MOV BH,0 ; 页号 MOV DX,0529H INT 10H LEA DX,STR1 ;输入用户名 ,保存在缓冲区STR1中 MOV AH,10 INT 21H LEA SI,STR1+2 LEA DI,STR3 MOV CX,COU
34、NT1 REPZ CMPSB ;逐一比较两串的对应字符是否相等 JNE R ;不相等,跳转到R 否则程序往下执行,输入密码LOP: MOV D,3 LEA SI,STR2+2 MOV BL,0 MOV DX,0a29HLOP2: MOV AH,2 ;设置密码光标位置 MOV BH,0 ; 页号 INT 10H MOV AH,8 INT 21H CMP AL,0DH JE LOP5 MOV SI,AL INC SI INC BL MOV AH,10 ;当前光标显示一个字符 MOV AL,2AH MOV BH,0 MOV CX,1 INT 10H ADD DX,1 ;加一列输入下一个字符 JMP
35、LOP2 lop12:jmp lop1LOP5: LEA SI,STR2+2 LEA DI,STR4 MOV CX,COUNT2 REPZ CMPSB ;逐一比较两串的对应字符是否相等 JNE Q ;不相等,转Q JMP T1 ;相等,转T1R: MOV AH,2 ;设置显示用户名错误信息光标位置 MOV BH,0 ; 页号 MOV DX,1521H INT 10H LEA DX,BUF4 ;输出用户名错误信息 MOV AH,9 INT 21H MOV AH,6 MOV AL,1 MOV CH,13 MOV CL,33 ;清用户名输入行的屏幕 MOV DH,13 MOV DL,53 MOV B
36、H,33 INT 10H MOV AH,1 INT 21H MOV AH,6 MOV AL,1 MOV CH,21 MOV CL,33 ;清用户名出错行的屏幕 MOV DH,21 MOV DL,60 MOV BH,33 INT 10H DEC F ;循环次数减1 JNZ LOP12 ;跳转到LOP1,重新输入用户名;-lop13:jmp lopQ: MOV AH,2 ;设置显示密码错误信息光标位置 MOV BH,0 ; 页号 MOV DX,1521H INT 10H LEA DX,BUF5 ;输出密码错误信息 MOV AH,9 INT 21H MOV AH,6 MOV AL,1 MOV CH,
37、16 MOV CL,33 ;清密码输入行的屏幕 MOV DH,16 MOV DL,53 MOV BH,33 INT 10H MOV AH,1 INT 21H MOV AH,6 MOV AL,1 MOV CH,21 MOV CL,33 ;清密码出错行的屏幕 MOV DH,21 MOV DL,60 MOV BH,33 INT 10H DEC D ;循环次数减1 JNZ LOP13 ;跳转到LOP2,重新输入密码 ;- MOV AH,1 INT 21H;* 显示第一页 * T1: MOV AH,6 MOV AL,0 MOV CH,0 MOV CL,0 ;清整个屏幕 MOV DH,24 MOV DL,
38、79 MOV BH,33 ;背景颜色 INT 10H MOV CX,2 MOV SI,OFFSET TOU MOV B,0010HLOPTOU: MOV AH,2 MOV BX,0 ;显示日历头部 MOV DX,B INT 10H ADD DX,0100H MOV B,DX MOV DX,SI MOV AH,9 INT 21H ADD SI,44 DEC CX JNZ LOPTOU MOV AH,2 ;定输入年份的光标 MOV BX,0 MOV DH,1 MOV DL,25 INT 10H LEA DX,STR5 ;输入年份 ,保存在缓冲区STR5中 MOV AH,10 INT 21H LEA
39、 DI,STR5+2 ; DI指向年份输入串的首地址 MOV CL,STR5+1 ;输入年份字符串的长度送到CL MOV AX,0 ;年份转化为真值P1: MOV BL,DI ; 取字符送到BL SUB BL,30H ;字符减去30H,转化为真值 MOV BH,0 MOV P,10 MUL P ADD AX,BX INC DI ;DI指向下一个字符 DEC CX ;长度减一 JNZ P1 MOV YEAR,AX ;把年送到YEAR中 CALL PR ;调用判断平年还是闰年的程序 JC L1 ;有进位,借位,跳转到L1,输出闰年,否则顺序执行,是平年 MOV AH,2 ;输出平年信息的光标 MO
40、V BX,0 MOV DH,1 MOV DL,30 INT 10H LEA DX,INPUT3 ;输出平年 MOV AH,9 INT 21H LEA DI,BUF1 MOV DI+1,BYTE PTR 28 ;平年把28送入BUF1中 CALL TIME ;调用系统时间 JMP RILI1L1: MOV AH,2 ;输出闰年信息的光标 MOV BX,0 MOV DH,1 MOV DL,30 INT 10H LEA DX,INPUT4 ; 输出闰年 MOV AH,9 INT 21H LEA DI,BUF1 MOV DI+1,BYTE PTR 29 ;闰年把29送入BUF1中 CALL TIME
41、;调用系统时间子程序 t111:jmp t1 RILI1: MOV AH,2 MOV BX,0 MOV DH,3 MOV DL,0 INT 10H LEA DX,YUE1 MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,3 MOV DL,42 INT 10H LEA DX,YUE2 MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,4 MOV DL,0 INT 10H LEA DX,RILI MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,11 MOV DL,0 INT 10H LEA D
42、X,YUE3 MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,11 MOV DL,42 INT 10H LEA DX,YUE4 MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,12 MOV DL,0 INT 10H LEA DX,RILI MOV AH,9 INT 21H ;*一月份* MOV A1,1 MOV A2,0 MOV A3,5 MOV A4,33 CALL YUE;*二月份* MOV A1,2 MOV A2,42 MOV A3,5 MOV A4,75 CALL YUE ;*三月份* MOV A1,3 MOV A
43、2,0 MOV A3,13 MOV A4,33 CALL YUE ;*四月份* MOV A1,4 MOV A2,42 MOV A3,13 MOV A4,75 CALL YUE MOV AH,1 INT 21H JMP T2T1111:JMP t111 ;*显示第二页* T2: MOV AH,6 MOV AL,0 MOV CH,0 MOV CL,0 ;清整个屏幕 MOV DH,24 MOV DL,79 MOV BH,33 ;背景颜色 INT 10H RILI2: MOV AH,2 MOV BX,0 MOV DH,3 MOV DL,0 INT 10H LEA DX,YUE5 MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,3 MOV DL,42 INT 10H LEA DX,YUE6 MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,4 MOV DL,0 INT 10H LEA DX,RILI MOV AH,9 INT 21H MOV AH,2 MOV BX,0 MOV DH,11 MOV DL,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度果园租赁与农业绿色生产技术引进合同
- 2024版借款分期偿还协议范文
- 二零二五年度影视作品衍生品收益分成合同范本3篇
- 2024版商用租赁合同模板3篇
- 2025年度红砖质量争议解决合同3篇
- 二零二五年度合伙养殖项目养殖技术培训合作协议3篇
- 2025年度新型农业产品库存质押融资合同3篇
- 二零二五年度汽车改装升级买卖合同3篇
- 2024年装修设计委托协议5篇
- 《科里亚的木匣》课件
- 服务推广合同协议(2025年)
- 麻风病防治知识课件
- 中国保险行业协会官方-2023年度商业健康保险经营数据分析报告-2024年3月
- 霉菌性阴道炎VVC的分类及诊治
- 预制舱技术方案思源弘瑞课件
- 四年级科学《运动与摩擦力》说课课件
- 诉讼费退费确认表
- 全球变暖视野下中国与墨西哥的能源现状分析
- 新外研版八年级上册英语全册教案(教学设计)
- 2022年(高级)茶艺师职业资格考试参考题库-下(多选、判断题部分)
- 边坡安全施工组织方案
评论
0/150
提交评论