自动判断闰年(微机原理课设)_第1页
自动判断闰年(微机原理课设)_第2页
自动判断闰年(微机原理课设)_第3页
自动判断闰年(微机原理课设)_第4页
自动判断闰年(微机原理课设)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武汉理工大学微机原理课程设计说明书摘要随着科学技术的飞速发展,计算机在现代科学技术的发展中起着越来越重要的作用。多媒体技术、计算机网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术、机械设计CAD、金融电子等都离不开计算机,微机原理与接口技术在此应运而生。本次课程设计是基于微机原理与接口技术的简单应用,运用在微机原理和接口技术课程上所学的汇编语言知识完成闰年的判断。众所周知,闰年的判断方法是:年份的数值能被4整除而不能被100整除,或者能被400整除。本课程设计的主的主要任务也是基于这样的算法利用汇编语言来完成闰年的判断。关键词:微机原理,汇编语言,算法,闰年1摘要随着科学技术的飞

2、速发展,计算机在现代科学技术的发展中起着越来越重要的作用。多媒体技术、计算机网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术、机械设计CAD、金融电子等都离不开计算机,微机原理与接口技术在此应运而生。本次课程设计是基于微机原理与接口技术的简单应用,运用在微机原理和接口技术课程上所学的汇编语言知识完成闰年的判断。众所周知,闰年的判断方法是:年份的数值能被4整除而不能被100整除,或者能被400整除。本课程设计的主的主要任务也是基于这样的算法利用汇编语言来完成闰年的判断。关键词:微机原理,汇编语言,算法,闰年自动判断闰年1 设计内容及要求本次课程的内容是自动判断闰年,要求输入具体的年

3、份后,输出是否为闰年的提示信息,并且可接着输入年份继续判断,同时支持多个年份同时输入,并给出判断结果,按Q或q键退出程序。由于此程序比较简单,增设输入错误提示功能,当输入的根本就不是年份时,系统就会提示错误并重新输入。2 概要设计2.1 系统总体分析判断闰年的具体算法为:如果该年份的数值能被4整除却不能被100整除,或者该年份的数值能被400整除,则该数值代表的年份为闰年。由于输入的十进制数相当于字符串以ASCII码形式存在输入缓冲区,因此在进行闰年判断时需将其转化为十进制数进行判断。由于任务要求程序能够实现多输入判断功能,因此需要循环检测存储区的数据然后依次判断输出。此处通过判断输入字符是否

4、为逗号,决定是否将转换的数存入另一存储区,通过检测输入字符是否为回车,决定是否退出子程序。2.2 各模块框图此程序虽然不难,但也不是很短,因此为了让程序条理清晰,我将整段程序分为三个模块: MAIN、INPUT和JUDGE。各模块的程序流程图分别如图2-1、2-2、及2-3所示。图2-1 MAIN模块流程图图2-2 INPUT模块流程图图2-3 JUDGE模块流程图3 详细设计3.1 各模块说明主模块MAIN用来显示提示输入以及输入的字符内容,最后输出做出的判断并确定是否退出程序;INPUT子模块用来将数字字符串转换为数字,以便进行下面的程序操作,同时对输入的年份格式进行判断,若格式错误则输出

5、Input illegal!,并要求重新输入年份;JUDGE子模块用来判断所输入的年份是否为闰年,若输入闰年2000则输出2000 is leap year!,若输入非闰年1000则输出1000 is not leap year!;若输入为1000,2000,12则输出1000 is not leap year ! 2000 is leap year! 12 is leap year!。 3.2 各模块详细设计在主模块MAIN中分别调用两个子模块INPUT、JUDGE,做出判断后显示是否退出的提示信息,按下任意键继续,按下Q或q键则退出程序。MAIN主模块的程序代码如下。START: MOV

6、AX,DATA MOV DS,AX LOP0: CALL INPUT ;调用INPUT子模块 CALL JUDGE ;调用JUDGE子模块 LEA DX,MESS ;显示提示信息 MOV AH,9 ;多字符输出 INT 21H MOV AH,08H ;键盘输入无回显 INT 21H CMP AL,Q ;输入Q或q退出程序 JE EXIT CMP AL,q JE EXIT LEA DX,NEW ;回车、换行 MOV AH,9 INT 21H JMP LOP0EXIT: MOV AH,4CH INT 21HINPUT子模块首先判断输入的年份是否正确,由于我们的要求必须输入数字年份,若不是系统会提示

7、错误。因为输入的年份是字符串,因此需要转换为数。数字所对应的ASCII值与他们相差30H,所以只需要将所输入的字符减30H就可以得到相应的数置。若输入的是非数字,那么经转换后得到的数值就不再0到9之间,此时系统会提示错误。同时设计要求能够支持多输入然后同时判断,因此程序设计循环检测回车和逗号,当检测到回车时则退出INPUT模块进入JUDGE模块,当检测到逗号时,则先将转化后的数存在另一个存储区,然后继续转换数字字符串。其部分程序如下 S4: MOV DL,BYTE PTR BX SUB DL,30H ;输入字符的ASCII值减去30H得到对应的数值 CMP DL,0 ;数值小于0则系统提示错误

8、 JB ERROR1 CMP DL,9 ; 数值大于9则系统提示错误 JA ERROR1 ADD AX,DX MOV DL,BYTE PTR BX+1 CMP DL,0DH ;检测字符是否为回车 JZ S2 CMP DL,2CH ;检测字符是否为逗号 JZ S3 INC BX MOV DX,10 MUL DX JMP S4S3: INC BX MOV SI,AX ADD SI,2 INC BX JMP S4ERROR1: LEA DX,NEW MOV AH,9 INT 21H LEA DX,ERROR ;系统提示错误信息 MOV AH,9 INT 21H LEA DX,NEW MOV AH,9

9、 INT 21H JMP S1 JUDGE子模块用来判断所输入的年份是否为闰年,先用转换后的数值除以4,若不能整除,则肯定不是闰年,若可以整除则再用其除以100,若不能整除,则肯定是闰年,若能整除则说明不是闰年。最后用转换后的数值除以400,若可以整除,则肯定是闰年,否则就不是闰年。其核心算法如下。 B1: POP AX MOV DX,0 MOV CX,AX ;将AX中的值暂存在CX中 MOV BX,4 DIV BX ;年份对应的数值除以4 CMP DX,0 JNE NO MOV AX,CX MOV DX,0 MOV BX,100 ;年份对应的数值除以100 DIV BX CMP DX,0 J

10、NE YES MOV AX,CX MOV DX,0 MOV BX,400 ;年份对应的数值除以400 DIV BX CMP DX,0 JNE NO YES: ;显示闰年提示信息 LEA DX,LEAP MOV AH,9 INT 21H JMP LOP1 NO: ;显示非闰年提示信息 LEA DX,NLEAP MOV AH,9 INT 21H JMP LOP1 在判断闰年时输入数据可能是多个年份,因此需要循环检测存储区被转换过的年份,当检测到为0时则退出JUDGE子程序。程序段如下LOP1: INC DI MOV DX,WORD PTR SI CMP DX,0 JZ B2 ADD SI,2 PU

11、SH DX LEA DX,NEW MOV AH,9 INT 21HC1: MOV DL,BYTE PTR DI CMP DL,0DH JZ B1 CMP DL,2CH JZ B1 MOV AH,2 INT 21H INC DI JMP C1退出JUDGE子程序段如下B2: LEA DX,NEW MOV AH,9 INT 21H POP DI POP SI POP AX POP DX POP CX POP BX RET 4 程序调试4.1 运行界面分析执行程序后的初始界面如图4-1所示。图4-1输入年份1000后执行程序,界面如图4-2所示。图4-2此时按下除Q和q的任意键可以继续执行程序,界面

12、如图4-3所示。图4-3输入年份1000,2000,12后再次执行程序,界面如图4-4所示。图4-4按下除Q和q的任意键可以继续执行程序,若此时输入的年份是输入的是字母、符号等,系统会提示错误并要求重新输入,如输入abcd时界面如图4-5所示。图4-5输入了正确格式的年份后继续执行程序,然后按下Q或者q可以退出程序。4.2 调试过程及分析 在各个子程序编写过程中,由于运用较多循环,导致目标地址命名有些混乱,在汇编时出现语法类的错误,还好此类错误比较容易发现并及时做好更改。而在程序调试过程中,由于循环设置不当,导致数字字符串进行转换时溢出,造成判断结果有误,有时还会出现无结果输出状态。此类错误不

13、属于语法范畴,通常是算法编写有些问题,导致程序运行混乱,在这种情况下,我只好采用单步运行程序,最后发现问题所在将转换算法进行修改,才得以恢复正常输出。5 心得体会微机原理与接口技术这门课程在最初接触时,由于没有找到有效的学习方法,面对较多的新名词、新语言,导致学习效果不佳。后来细心学习之后,发现汇编语言与C语言的编程思想有很多类似之处,其指令形式虽然不一样,但一些基本的语句结构基本相同,如顺序结构、分支结构和循环结构等。虽然汇编语言没有C语言那么方便,但也能实现大部分的程序编写功能。也是在细学之后,才发现汇编语言的强大功能,也真切体会到软件相对硬件的优越之处。通过这次课程设计使我懂得了理论与实

14、际相结合是很重要的,后悔平时学习中的眼高手低;同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。同时经过这次课程设计,我知道了平时要养成多查阅资料的好习惯,不要遇到不懂的就问别人,只有经过自己的一番努力思考再与老师或同学讨论,才能真正的学到知识。当你拿到一个任务但却无从下手时,不妨将任务细分成若干小任务,然后各个击破,逐一拿下。也正是运用这种思想,我把程序分成几个子程序分别编写,最后再汇总调试程序,当发现问题时,可以分别查看子程序进行修改,方便快捷而且思路清晰,既方便自己程序的调试,又方便了阅读者的理清我的编程思路。总的来说,通过这次课程设计,我受益匪浅

15、,掌握了一些汇编编程的经验及小技巧,我想这些经验在以后的学习和工作中都是用得着的。附录 程序清单DATA SEGMENT INBUFF DB 20,0,20 DUP(0) ;定义输入缓冲区 YEAR DW 20 DUP(0) I DB 0DH,0AH,Please input the year:,$ ERROR DB Input illegal!,$ LEAP DB is leap year!,$ NLEAP DB is not leap year!,$ MESS DB If you want to quit please press .q/Q. DB 0DH,0AH,Press other

16、key to continue,$ NEW DB 0DH,0AH,$DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LOP0: CALL INPUT ;调用INPUT子模块 CALL JUDGE ;调用JUDGE子模块 LEA DX,MESS ;显示提示信息 MOV AH,9 ;多字符输出 INT 21H MOV AH,08H ;键盘输入无回显 INT 21H CMP AL,Q ;输入Q或q退出程序 JE EXIT CMP AL,q JE EXIT LEA DX,NEW ;回车、换行 MOV

17、AH,9 INT 21H JMP LOP0EXIT: MOV AH,4CH INT 21HINPUT PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI S1: LEA DX,I ;输入年份提示 MOV AH,9 INT 21H LEA DX,INBUFF MOV AH,0AH INT 21H LEA BX,INBUFF+2 MOV AX,0 MOV DX,0 LEA SI,YEAR MOV CX,20S5: MOV SI,0 INC SI LOOP S5 LEA SI,YEAR S4: MOV DL,BYTE PTR BX SUB DL,30H ;输入字符的A

18、SCII值减去30H得到对应的数值 CMP DL,0 ;数值小于0则系统提示错误 JB ERROR1 CMP DL,9 ; 数值大于9则系统提示错误 JA ERROR1 ADD AX,DX MOV DL,BYTE PTR BX+1 CMP DL,0DH JZ S2 CMP DL,2CH JZ S3 INC BX MOV DX,10 MUL DX JMP S4S3: INC BX MOV SI,AX ADD SI,2 INC BX JMP S4ERROR1: LEA DX,NEW MOV AH,9 INT 21H LEA DX,ERROR ;系统提示错误信息 MOV AH,9 INT 21H L

19、EA DX,NEW MOV AH,9 INT 21H JMP S1 S2: MOV SI,AX MOV CX,AX LEA DX,NEW MOV AH,9 INT 21H MOV AX,CX POP SI POP DX POP CX POP BX RET INPUT ENDP JUDGE PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX PUSH SI PUSH DI LEA SI,YEAR LEA DI,INBUFF+1 LOP1: INC DI MOV DX,WORD PTR SI CMP DX,0 JZ B2 ADD SI,2 PUSH DX LEA DX,NEW MOV AH,9 INT 21HC1: MOV DL,BYTE PTR DI CMP DL,0DH JZ B1 CMP DL,2CH JZ B1 MOV AH,2 INT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论