微机课设基于汇编语言的闰年判断程序设计Word文件下载.docx
《微机课设基于汇编语言的闰年判断程序设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机课设基于汇编语言的闰年判断程序设计Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
2.2结构概述·
三软件编程·
5
四程序运行·
10
五收获与心得体会·
11
5.1设计收获·
5.2心得体会·
12参考书目·
12
引言
为了实际提高汇编语言的熟练程度,巩固课堂知识,本次课程设计中,我们将结合实际生活中常常遇到的闰年问题,运用MF2KI软件来编写如何判断闰年的程序。
为了实现对输入年份是否为闰年的判断,所设计的程序需要完成的功能主要有:
1、在屏幕上显示提示信息,输入年份;
2、判断输入格式是否正确;
3、判断输入的年份是否为闰年。
判断某年为闰年的汇编语言表达式为:
(((AX)MOD4EQ0)AND((AX)MOD100EQ0))OR((AX)MOD400EQ0)其中,(AX)中存放的是从键盘输入的年份值。
程序编写完成之后,会经过编译、连接、调试等过程,程序运行后,屏幕会提示输入年份,输入后程序会自动判断输入的年份是否为闰年。
一、设计任务
1.1设计任务
根据提示输入任意年份,编写判断闰年的程序,如果是闰年则在屏幕上现实“Y”,否则现实“N”。
1.2设计目的
1、学习分支、中断和逻辑表达,寄存器的运用和子程序的调用;
2、熟悉汇编语言程序的编译、运行过程;
3、了解汇编语言编写的各个流程
4、将课堂上所学的知识学以致用,通过程序的制作过程学习课外的新知识,并加强加深对旧知识的理解与掌握。
二、设计方案
2.1设计分析
闰年的判断是一个非常经典的问题,在学习各种语言时都会遇到。
解决该问题的关键是找到判断某年是否为闰年的方法。
要判断某一年是否为闰年,需判断该年份的数值正整数是否满足以下两个条件中的任意一个:
能够被4整除,但不能够被100整除;
能够被4整除,同时又能够被400整除。
2.2结构概述
主模块:
显示提示输入年份以及输入的字符内容,和最后输出的判断。
子模块:
判断输入:
该模块是对输入的年份的格式的判断,若是错误则显示错误并显示输入提示,正确则进行下面的操作。
字符串转换格式:
将数字字符串转换成数字,以进行下面的程序操作。
判断闰年:
判断输入的年份是否为闰年,若是则输出“xxxxisaleapyear!
”,若不是则输出“xxxxisnotaleapyear!
”,然后退出程序。
根据以上结构,可画出以下程序流程图
图2-1判断闰年流程图
本框图列出了此次课程设计的总流程,显示信息,输入数据,判断格式,判断闰年和结束程序。
较为直观地显示了设计的顺序结构,循环结构及分支结构。
三、软件编程
根据图2-1利用DOS21H中断类型的10号键盘功能调用,将键盘接受到的年份数值的字符串按字节存入缓冲区。
将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCⅡ码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输入该年是否为闰年的信息。
主要程序代码如下:
datasegment
inbuffdb5,?
5dup(?
)
promptdb'
Pleaseinputtheyear:
'
'
$'
errmsgdb'
Inputillegal!
yesdb'
isleapyear'
nodb'
isnotleapyear'
messdb'
Continue?
(y/n):
newlinedb13,10,'
;
回车换行
dataends
codesegment
mainprocfar
assumecs:
code,ds:
data
start:
pushds
subax,ax
pushax
movax,data
movds,ax
lop0:
callinput
calljudge
leadx,mess
movah,09h
int21h;
是否继续输入年份的判断
movah,01h
int21h
cmpal,'
n'
jeexit
continue:
leadx,newline
jmplop0
exit:
ret
mainendp
;
输入一个具体的年份,并转换成10进制
返回:
(ax)=输入的年份
inputprocnear
pushbx
pushcx
pushdx
s1:
leadx,prompt
提示输出
leadx,inbuff
movah,0ah
键盘输入
movdl,byteptrinbuff[1];
把有效地址为inbuff的字节送给dl
cmpdl,4;
输入的值判断是否为4位数
jneerror;
调用输入不合条件时的错误处理
movcx,4
leabx,inbuff
addbx,2
movax,0
movdx,0
lop1:
检查输入有效性
movdl,10
muldl
movdl,byteptr[bx]
subdl,30h;
将字符转化为数值
cmpdl,0
jberror
cmpdl,9
jaerror
addax,dx
incbx,bx+1;
循环体中字符在字符串中的位置
looplop1
jmps2
error:
错误处理
leadx,errmsg
jmps1
s2:
movcx,ax
movax,cx
popdx
popcx
popbx;
现场恢复
inputendp
判断一个年份是否闰年
输入:
(ax)=年份
judgeprocnear
pushax;
保存ax;
输出要判断的年份
lop2:
movah,02h
incbx
looplop2;
循环输出年份正确时结果中的年份
lop3:
popax
movcx,ax;
保存ax到cx中
movbx,4;
判断是否能被4整除
divbx
cmpdx,0
jnenotleap
movbx,100;
判断是否能被100整除
jneisleap
movbx,400;
判断是否能被400整除
jnenotleap
isleap:
leadx,yes
jmps3
notleap:
leadx,no
s3:
leadx,newline;
换行
输出年份正确时结果的剩余部分
popbx
judgeendp
codeends
endstart
四、程序运行
在软件中调试后,运行上面的程序,会出现初始界面。
初始界面如图4-1所示:
图4-1初始界面
在初始界面的光标处,输入2003,回车换行,则显示2003isnotleapyear;
并给出是否继续的提示,输入y,屏幕继续显示提示输入的语句;
如果输入错误,则显示Inputillegal!
并提示用户继续输入年份,直到输入正确的年份为止;
输入2000,回车换行,则显示2000isleapyear;
并给出是否继续的提示,输入n,则显示屏幕关闭,程序结束。
运行结果如图4-2所示:
图4-2运行结果
五、收获与心得体会
5.1设计收获
两周的课程设计结束了,本次的课程设计中,我不但对课本上的知识有了更深的了解和巩固,而且还学到了平时在课堂上学不到的东西。
短暂的时间里,我学到了不少知识,熟悉了很多程序代码,也认识到了自己有许多不足之处。
已掌握的知识也不牢固,遇到一些棘手的问题无法自己解决,但是,我通过询问同学,查询资料,最终使问题得以解决。
由此,我深刻体会到,只有在实际编程时我们才能认识到自己的不足之处,才能进而进行弥补来使自己的水平有所提高。
这次课程设计使我对计算机系统汇编有了更加完整的认识:
汇编语言主要是研究软件到硬件的程序设计问题,它是计算机能够提供给用户使用的最快而且最有效的语言,也是能够利用计算机所有硬件特性并直接控制硬件的唯一语言。
通过查阅资料我拓宽了自己的知识面,增强了学好汇编语言的信心。
这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。
但这次是一个综合的程序,平时的很多程序都用到了。
子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。
不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的学习和工作也有指导作用。
我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!
5.2心得体会
课程设计是我们专业课程知识综合应用的实践训练,也是我们迈向社会,从事职业工作前一个必不少的过程。
”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。
我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
实验过程中我们遇到的许多问题仅依靠自己掌握的一些知识是远不能解决的,因此我们发挥团队精神,彼此协作,互相帮助,以集思广益的方式解决了许多问题。
大家在实验遇到瓶颈问题时都不曾气馁沮丧,而是翻课本查资料,各尽其能,以求最大限度的解决问题。
遇到问题时我们相互提醒相互借鉴,有效地解决了许多问题。
大家这种精诚合作的精神使我非常感动。
实验设计过程中,老师给我们的指导尤为重要,否则我们的实验可能不会顺利完成,而我们在本次试验中所付出的努力极有可能白白浪费掉。
在此,我衷心感谢这一学期以来兢兢业业,不辞劳苦为我们教授知识的张老师,老师严谨细致、一丝不苟的作风一直是我们工作、学习中的榜样。
同时也很感谢本次试验中给予我帮助的各位同学!
参考书目
[1]李敬兆,8086/8088和arm核汇编语言程序设计中国科技大学出版社,2008
[2]张光长,汇编语言程序设计:
北京大学出版社,2009.7
[3]陈够喜等著,微机原理应用实验教程.北京:
人民邮电出版社,2006
[4]刘乐善,微型计算机接口技术及应用.武汉:
华中科技大学出版社,2004
[5]沈美明,温冬婵编著IBM—PC汇编语言程序设计(第二版)清华大学出版社
[6]张开成,微型计算机原理,西南师范大学出版社,2006.8
[7]谭硫安张雪兰,windows汇编语言程序设计教程:
电子工业大学出版社,2005.4