判断某一年是否为闰年课程设计.docx

上传人:b****5 文档编号:7428275 上传时间:2023-01-23 格式:DOCX 页数:13 大小:64.72KB
下载 相关 举报
判断某一年是否为闰年课程设计.docx_第1页
第1页 / 共13页
判断某一年是否为闰年课程设计.docx_第2页
第2页 / 共13页
判断某一年是否为闰年课程设计.docx_第3页
第3页 / 共13页
判断某一年是否为闰年课程设计.docx_第4页
第4页 / 共13页
判断某一年是否为闰年课程设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

判断某一年是否为闰年课程设计.docx

《判断某一年是否为闰年课程设计.docx》由会员分享,可在线阅读,更多相关《判断某一年是否为闰年课程设计.docx(13页珍藏版)》请在冰豆网上搜索。

判断某一年是否为闰年课程设计.docx

判断某一年是否为闰年课程设计

郑州航空工业管理学院

微机原理课程设计说明书

 

2012级电气工程及其自动化专业1206972班级

 

题目判断某一年是否为闰年

姓名贾新亮学号120697211

指导教师王义琴职称教授

 

二О一二年十二月十二日

摘要

随着科学技术的迅速发展,微机的应用越来越普遍,在此设计中利用DOS21H中断类型的10号键盘功能调用,将从键盘接收的表示年份数值的字符串按字节存入缓冲区。

将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCll码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。

解决本问题的关键是找到判断闰年的方法。

判断闰年的规则是:

如果某一年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年。

判断某年是否为闰年的汇编语言的表达式为:

(((AX)MOD4EQ0)AND((AX)MOD100NE0))OR((AX)MOD400EQ0)

关键词:

判断闰年中断字符串输入输出

 

一、判断某一年是否为闰年的基本原理

本设计是根据闰年的计算方法,利用汇编语言编写的一个简单的判断闰年的程序。

根据判断闰年规则:

如果某年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年,否则不是闰年。

在本程序运行后,只要从键盘输入年份,通过计算后,就能输出该年份是否为闰年的信息。

 

二、设计方案

2.1设计程序流程图

闰年计算设计程序流程图

2.2设计说明

如图1闰年计算程序流程图所示,程序开始运行以后,首先屏幕输出提示语,提示用户输入一个年份。

用户输入年份后,程序将输入的字符转换为数值。

设计利用乘法的操作,实现字符之间的10倍数值转换关系。

将年份字符转换成数值后,则进行是否是闰年的判断。

首先将年份除以4,若不能整除,则判断为不是闰年,屏幕将输出该年不是闰年的信息,并提示用户是否继续下一个年份的判断,如果用户输入‘n’则表示不需要继续,程序将退出,否则继续下一个年份的判断;若能整除4,则该年份将继续除以100,若不能整除,则判断为是闰年,屏幕将输出该年是闰年的信息,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断;若能整除100,则该年份将继续除以400,若能整除,则判断为是闰年,屏幕将输出该年是闰年的信息,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断;若不能整除400,则判断为不是闰年,屏幕将输出该年不是闰年的信息,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断。

 

三、软件设计

3.1代码段定义:

代码段需要定义欲显示的字符串,且字符串以‘$’作为结束标志,还需定义欲输入字符串的缓冲区,缓冲区的第一个字节存放能保存的最大字符数,第二个字节存放实际输入的字符数,用户从键盘输入的字符从第三个字节开始存放,直到用户输入回车键为止。

本设计代码段定义如下:

DATASSEGMENT

MAXLENDB5

ACTLENDB?

YEARDB4DUP(0)

YEARALLDW0

NUM400DW400

NUM100DW100

NUM4DW4

NUMMULDW1000,100,10,1

MESSAGE1DB'pleaseinputtheyear',13,10,'$'

MESSAGE2DB'theyearisrun',13,10,'$'

MESSAGE3DB'theyearisping',13,10,'$'

DATASENDS

3.2提示语显示:

利用DOS21H中断类型09号键盘功能调用,在屏幕输出提示用户输入年份的提示。

首先,将要显示的字符串放在内存数据区中,本设计提示语显示程序代码如下:

MOVAH,09H;输出

MOVDX,OFFSETMESSAGE1

INT21H

3.3字符串输入:

利用DOS21H中断类型的10号键盘功能调用,将从键盘接收的表示年份数值的字符串按字节存储缓冲区。

首先,应在内存中建立一个输入缓冲区,如inbuffdb5,?

5dup(?

)。

本设计字符串输入程序代码如下:

MOVAH,0AH;字符串输入

LEADX,MAXLEN

INT21H

3.4数制转换:

利用0-9这10个数的ASCII码值比其本身大30H的关系,将字符串中的每个字符转换为对应的十进制数值。

本设计数制转换程序代码如下:

MOVCX,4

MOVSI,0

MOVDI,0

MOVYEARALL,0

NEXT:

MOVAL,YEAR[SI]

SUBAL,30H

CBW

MULNUMMUL[DI]

ADDYEARALL,AX

INCSI

ADDDI,2

LOOPNEXT

3.5是否为闰年的判断:

利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。

MOVDX,0

MOVAX,YEARALL

DIVNUM4

CMPDX,0

JNZNO

CONTINUE:

MOVDX,0

MOVAX,YEARALL

DIVNUM100

CMPDX,0

JNZYES

MOVDX,0

MOVAX,YEARALL

DIVNUM400

CMPDX,0

JZYES

3.6年份输出显示:

利用DOS21H中断类型09号键盘功能调用,在屏幕输出提示用户输入年份的提示。

本设计年份输出显示程序代码如下:

YES:

MOVAH,09H

MOVDX,OFFSETMESSAGE2

INT21H

JMPDONE

NO:

MOVAH,09H

MOVDX,OFFSETMESSAGE3

INT21H

JMPDONE

 

4、设计源程序

DATASSEGMENT

MAXLENDB5

ACTLENDB?

YEARDB4DUP(0)

YEARALLDW0

NUM400DW400

NUM100DW100

NUM4DW4

NUMMULDW1000,100,10,1

MESSAGE1DB'pleaseinputtheyear',13,10,'$'

MESSAGE2DB'theyearisrun',13,10,'$'

MESSAGE3DB'theyearisping',13,10,'$'

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

MAINPROCFAR

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATAS

MOVDS,AX

MOVAH,09H;输出

MOVDX,OFFSETMESSAGE1

INT21H

MOVAH,0AH;字符串输入

LEADX,MAXLEN

INT21H

MOVCX,4

MOVSI,0

MOVDI,0

MOVYEARALL,0

NEXT:

MOVAL,YEAR[SI]

SUBAL,30H

CBW

MULNUMMUL[DI]

ADDYEARALL,AX

INCSI

ADDDI,2

LOOPNEXT

MOVDX,0

MOVAX,YEARALL

DIVNUM4

CMPDX,0

JNZNO

CONTINUE:

MOVDX,0

MOVAX,YEARALL

DIVNUM100

CMPDX,0

JNZYES

MOVDX,0

MOVAX,YEARALL

DIVNUM400

CMPDX,0

JZYES

YES:

MOVAH,09H

MOVDX,OFFSETMESSAGE2

INT21H

JMPDONE

NO:

MOVAH,09H

MOVDX,OFFSETMESSAGE3

INT21H

JMPDONE

DONE:

MOVAH,4CH

INT21H

MAINENDP

CODESENDS

ENDSTART

 

五、结论

经过这次课程设计,大大地提高了我的分析解决问题的能力,在这一过程中,我根据课程设计题目所给定的总题要求,独立设计、分析和调试程序,在面对问题时,能够耐心思考,解决了很多问题,从中也学到了很多书面上所没有讲明的问题。

在运用汇编语言理论知识去解决问题时,也对以前学过的知识点有更深一层的了解。

虽然在设计的过程中遇到了很多问题,但最后通过自己的思考与询问他人,我成功的完成了整体设计要求。

经过多次的修改完成了画出了设计流程图。

接下来根据流程图完成了程序的编写,程序编完后用了一段时间对程序进行调试。

在调试的过程中,遇到了一些问题,刚开始程序并不能很好的运行,经过错误分析与不断修改,最后解决了问题,程序能够正常运行并输出正确的结果。

通过本次实验,我对循环语句、分支语句和子程序有了进一步的了解,明确了它们各自的功能及具体的运用情况。

在实验中体现出对指令不熟练,因此应该在以后的学习中进一步的学习,编出实现功能更好的,让自己满意的程序来。

我通过这次课程设计,深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了自己的学习成果。

设计的整个过程,锻炼了我们的思考与运用知识的能力,并且学习到做研究的耐心与专注力,要有一丝不苟的态度,科学不可有半点马虎。

这次课程设计,让我学到了很多有用的知识,对我以后的学习有很大的帮助与提高。

总之,我在这次课程设计中受益匪浅。

六、参考文献

[1]余春暄.80x86/Pentium微机原理及接口技术.北京:

机械工程出版社,2008

[2]张荣标.微型计算机原理与接口技术.北京:

机械工业出版社,2008

[3]王爽.汇编语言.北京:

清华大学出版社,2008

[4]杨季文.80x86汇编语言程序设计教程.北京:

清华大学出版社,2006

 

设计总结:

通过这次课程设计,进一步提高了我的分析问题和解决问题的能力。

要理论联系实际,理论搞懂了,不会应用还是无济于事。

在设计中,确实遇到了不少困难,但经过仔细查阅相关资料和书籍,寻求同学和老师的帮助,最终解决问题。

在此,非常感谢同学和老师的耐心的帮助,祝同学们学习进步,祝老师工作顺利。

指导教师评语:

 

课程设计成绩:

指导教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1