您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于汇编语言的闰年判断程序设计
基于汇编语言的闰年判断程序设计第一章设计方案一、设计内容根据提示信息输入任意年份,编写判断闰年的程序,如果是闰年,则在屏幕上显示“Y”,否则显示“N”。二、设计分析利用DOS21H中断类型的10号键盘功能调用,将键盘接受到的年份数值的字符串按字节存入缓冲区。将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCⅡ码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输入该年是否为闰年的信息。三、算法分析闰年计算是一个非常经典的问题,在学习各种语言时都会遇到这个问题,用来判断某年是否为闰年。具体算法为如果该年份的数值正整数若能被100整除,又能被400整除,或者不能被100整除,却能被4整除,则该数值代表的年份为闰年。四、程序流程图本框图列出了此次课程设计的总流程,显示信息,输入数据,判断格式,判断闰年和结束程序。客观显示了设计的顺序结构,循环结构及分支结构。1图2-1程序流程图第二章程序设计一、程序分析主程序:显示提示输入年份以及输入的字符内容,和最后输出的判断。2子程序:1.判断输入:该模块是对输入的年份的格式的判断,若是错误则显示错误Error,正确则进行下面的操作。2.字符串转换格式:将数字字符串转换成数字,以便进行下面的程序操作。3.判断闰年:判断输入的年份是否为闰年,若是则输出“Thisisaleapyear!”,若不是则输出“Thisisnotaleapyear!”,然后退出。二、汇编程序datasegmentinbuffdb5,?,5dup(?)promptdb'Pleaseinputtheyear:','$'errmsgdb'Inputillegal!','$'yesdb'isaleapyear','$'nodb'isnotaleapyear','$'messdb'Continue?(y/n):','$'newlinedb13,10,'$';回车换行dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,axlop0:callinputcalljudgeleadx,messmovah,09hint21h;是否继续输入年份的判断movah,01hint21hcmpal,'n'jeexitcontinue:leadx,newlinemovah,09hint21hjmplop0exit:ret3mainendp;输入一个具体的年份,并转换成10进制;返回:;(ax)=输入的年份inputprocnearpushbxpushcxpushdxs1:leadx,promptmovah,09hint21h;提示输出leadx,inbuffmovah,0ahint21h;键盘输入movdl,byteptrinbuff[1];把有效地址为inbuff的字节送给dlcmpdl,4;输入的值判断是否为4位数jneerror;调用输入不合条件时的错误处理movcx,4leabx,inbuffaddbx,2movax,0movdx,0lop1:;检查输入有效性movdl,10muldlmovdl,byteptr[bx]subdl,30h;将字符转化为数值cmpdl,0jberrorcmpdl,9jaerroraddax,dxincbx;循环体中字符在字符串中的位置bx+1looplop1jmps2error:;错误处理leadx,newlinemovah,09hint21hleadx,errmsgmovah,09hint21hleadx,newline4movah,09hint21hjmps1s2:movcx,axleadx,newlinemovah,09hint21hmovax,cxpopdxpopcxpopbx;现场恢复retinputendp;判断一个年份是否闰年;输入:;(ax)=年份judgeprocnearpushbxpushcxpushdxpushax;保存ax;输出要判断的年份movcx,4leabx,inbuffaddbx,2lop2:movdl,byteptr[bx]movah,02hint21hincbxlooplop2;循环输出年份正确时结果中的年份lop3:popaxmovdx,0movcx,ax;保存ax到cx中movbx,4;判断是否能被4整除divbxcmpdx,0jnenotleapmovax,cxmovbx,100;判断是否能被100整除divbxcmpdx,0jneisleap5movax,cxmovbx,400;判断是否能被400整除divbxcmpdx,0jnenotleapisleap:leadx,yesmovah,09hint21hjmps3notleap:leadx,nomovah,09hint21hs3:;换行leadx,newlinemovah,09hint21h;输出年份正确时结果的剩余部分popdxpopcxpopbxretjudgeendpcodeendsendstart第三章程序调试在MF2KI软件中调试,运行上面的程序,初始界面:如图4-1图4-1输入年份2008执行程序,回车换行,则显示2008isleapyear;并给出是否继续的提示,输入y,屏幕继续显示提示输入语句;如果输入错误,如abcd则显示Inputillegal!并提示用户继续输入年份,知道输入正确年份为止;6输入2010,回车换行,则显示2001isnotleapyear;并给出是否继续的提示,输入n,则显示屏幕关闭,程序结束。运行界面:如图4-2图4-2利用DOS21H中断类型的10号键盘功能调用,将从键盘接收的年份数值型字符串按字节存入缓冲区。将字符串中的每个字符转换为对应的十进制数值(利用0~9这10个数的ASCll码值比其本身大30H的关系),通过判断某年是否为闰年的表达式,判断输出是否为闰年的信息。在缓存BUF中字符转换十六进制数字的过程中也会经常出现寄存器存放、地址指示等错误。其中运用了一些汇编跳转、运算等大量指令,还有子程序的调用等。
本文标题:基于汇编语言的闰年判断程序设计
链接地址:https://www.777doc.com/doc-6059477 .html