基于汇编语言的程序设计.docx
- 文档编号:3658913
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:14
- 大小:125.75KB
基于汇编语言的程序设计.docx
《基于汇编语言的程序设计.docx》由会员分享,可在线阅读,更多相关《基于汇编语言的程序设计.docx(14页珍藏版)》请在冰豆网上搜索。
基于汇编语言的程序设计
目录
第一章设计课题概述2
1.1设计目的2
1.2设计内容及要求3
第二章、总体设计3
2.1设计思想及实施方案3
2.2结构概述3
第三章、软件设计4
3.1流程图及其说明4
3.2源程序清单和注释5
第四章、调试过程及结果13
总结17
4.1设计收获17
4.2心得体会17
参考资料19
第一章设计课题概述
1.1设计目的
1、通过本学期对微机原理的学习,掌握的知识还停留在理论的上.但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来.
2学习分支、中断和逻辑表达,寄存器的运用和子程序的调用;熟悉汇编语言程序的编译、运行过程;
3、了解汇编语言编写的各个流程,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力.
4、将课堂上所学的知识学以致用,通过程序的制作过程学习课外的新知识,并加强加深对旧知识的理解与掌握.
5、熟悉掌握dos系统调令,初步掌握计算机应用系统设计的步骤,提高分析和解决实际问题的能力.
6、掌握现代设计手段和汇编语言应用程序.
7、通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力.
1.2设计内容及要求
运用汇编语言编写关于闰年判断的汇编程序,根据提示输入任意年份,编写判断闰年的程序,如果是闰年则在屏幕上显示,否则显示不是.需要运用汇编语言,不允许运用c语言,java等语言,并且运用所学过的程序语言和其他技术共同完成闰年判断的程序设计,并且得到运行结果,分析并理解该汇编语言程序的内容,理解程序的相应dos指令调用的相应指令.
第二章、总体设计
2.1设计思想及实施方案
闰年的判断是一个非常经典的问题,闰年判断的程序设计是基于汇编语言的基础上对闰年的判断的程序设计.在学习各种语言时都会遇到.解决该问题的关键是找到判断某年是否为闰年的方法.要判断某一年是否为闰年,需判断该年份的数值正整数是否满足以下两个条件中的任意一个:
能够被4整除,但不能够被100整除;
能够被4整除,同时又能够被400整除.
2.2结构概述
主模块:
显示提示输入年份以及输入的字符内容,和最后输出的判断.
子模块:
判断输入:
该模块是对输入的年份的格式的判断,若是错误则显示错误并显示输入提示,正确则进行下面的操作.
字符串转换格式:
将数字字符串转换成数字,以进行下面的程序操作.
判断闰年:
判断输入的年份是否为闰年,若是则输出“theyearisaleap!
”,若不是则输出“theyearisnotaleap!
”,然后可以无限循环查找其他年数.
④循环输入:
查询完可以继续查询想要查询的年份,并且可以无限次的输入.
第三章、软件设计
3.1流程图及其说明
根据以上结构,可画出以下程序流程图
图3-1判断闰年流程图
本框图列出了此次课程设计的总流程,显示信息,输入数据,判断格式,判断闰年和结束程序.较为直观地显示了设计的顺序结构,循环结构及分支结构.
3.2源程序清单和注释
根据流程图利用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
movah,09h
int21h
jmplop0
exit:
ret
mainendp;输入一个具体的年份,并转换成10进制
返回:
(ax)=输入的年份
inputprocnear
pushbx
pushcx
pushdx
s1:
leadx,prompt
movah,09h
int21h;提示输出
leadx,inbuff
movah,0ah
int21h;键盘输入
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,newline
movah,09h
int21h
leadx,errmsg
movah,09h
int21h
leadx,newline
movah,09h
int21h
jmps1
s2:
movcx,ax
leadx,newline
movah,09h
int21h
movax,cx
popdx
popcx
popbx;现场恢复
ret
inputendp;判断一个年份是否闰年
输入:
(ax)=年份
judgeprocnear
pushbx
pushcx
pushdx
pushax;保存ax;输出要判断的年份
movcx,4
leabx,inbuff
addbx,2
lop2:
movdl,byteptr[bx]
movah,02h
int21h
incbx
looplop2;循环输出年份正确时结果中的年份
lop3:
popax
movdx,0
movcx,ax;保存ax到cx中
movbx,4;判断是否能被4整除
divbx
cmpdx,0
jnenotleap
movax,cx
movbx,100;判断是否能被100整除
divbx
cmpdx,0
jneisleap
movax,cx
movbx,400;判断是否能被400整除
divbx
cmpdx,0
jnenotleap
isleap:
leadx,yes
movah,09h
int21h
jmps3
notleap:
leadx,no
movah,09h
int21h
s3:
leadx,newline;换行
movah,09h
int21h;输出年份正确时结果的剩余部分
popdx
popcx
popbx
ret
judgeendp
codeends
endstart
第四章、调试过程及结果
先将masm软件存放到d盘里,然后将源程序保存在同样的存储位置,然后点击开始,运行分别输入:
---D:
\
---CDMASM
---MASMXUXIN
其中运行的结果如下图
图4-1运行调试
运行结果有错误,通过多次的查找并修改,使源程序没有错误.如图
图4-2运行结果
在软件中调试后,输入—LINK,--XUXIN
运行上面的程序,会出现初始界面.
初始界面如图所示:
图4-3初始界面
在初始界面的光标处,输入1212,回车换行,则显示THEYEARISLEAP;并继续输入文件名XUXIN,屏幕继续显示提示输入的语句PLEASEINPUT:
;!
并提示用户继续输入年份,直到输入正确的年份为止;输入2000,回车换行,则显示THEYEARisleapyear;并继续输入了2008、1000、1999等,程序可以无限循环.
运行结果如图所示:
图4-4运行结果
总结
4.1设计收获
两周的课程设计结束了,本次的课程设计中,我不但对课本上的知识有了更深的了解和巩固,而且还学到了平时在课堂上学不到的东西.
短暂的时间里,我学到了不少知识,熟悉了很多程序代码,也认识到了自己有许多不足之处.已掌握的知识也不牢固,遇到一些棘手的问题无法自己解决,但是,我通过询问同学,查询资料,最终使问题得以解决.由此,我深刻体会到,只有在实际编程时我们才能认识到自己的不足之处,才能进而进行弥补来使自己的水平有所提高.
这次课程设计使我对计算机系统汇编有了更加完整的认识:
汇编语言主要是研究软件到硬件的程序设计问题,它是计算机能够提供给用户使用的最快而且最有效的语言,也是能够利用计算机所有硬件特性并直接控制硬件的唯一语言.通过查阅资料我拓宽了自己的知识面,增强了学好汇编语言的信心.这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序.但这次是一个综合的程序,平时的很多程序都用到了.子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间.不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的学习和工作也有指导作用.我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!
4.2心得体会
课程设计是我们专业课程知识综合应用的实践训练,也是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
实验过程中我们遇到的许多问题仅依靠自己掌握的一些知识是远不能解决的,因此我们发挥团队精神,彼此协作,互相帮助,以集思广益的方式解决了许多问题.大家在实验遇到瓶颈问题时都不曾气馁沮丧,而是翻课本查资料,各尽其能,以求最大限度的解决问题.遇到问题时我们相互提醒相互借鉴,有效地解决了许多问题.大家这种精诚合作的精神使我非常感动.
通过整整一个星期的摸索和编程,查资料,终于把程序完成了,和小组的成员一起讨论问题,分析问题,发现问题,解决问题,也收获了不少,我们的编程技术都有所提高,我们的体会就是:
要提高自己的编程能力,你必须亲自去体验、去设计、编辑、编译、调试、运行.每一个程序员都是在失败、尝试、失败、尝试与收获中成长起来的.通过老师的提示及相关实验指导书的资料我们找到了入手点,这点也是我觉得题目设置的比较合理的一点:
在已有基础题目的基础上加入创新内容.在基础功能的实现上并没有遇到问题,主要也是有参考内容的知道,同时通过参考内容更好的把握了设计的整体思路及各个模块的细节.但是在拓展功能上就有不少的问题.就如我所做的电子琴来说,基本功能的程序已经在那里,但是如何使它可以同时用数码管显示音阶呢?
我们就找到了数码管显示的相关程序,但是直接相拼接显然是不行的,他们的端口还有重叠的地方,还有就是8255,8253两块芯片的相关使用指令,这些都是关系到我们程序是否实现功能的所在.我们通过翻阅相关资料,逐步解决了相关的问题,然后我们同时也想到了将我们的电子琴做得与众不同,所以想到了旁边的点阵LED显示器,为了使我们的计划成功,同样的我们也翻阅了很多的资料,最后终于完成.
最后在老师的提示下,我们完成了在程序中预置歌曲的功能,还有开机音乐,但是在录制歌曲时出现了问题.我们试了很久,但是最后还是无果而终,留下了一丝遗憾.也希望在以后的实际问题中,能够得到相关解决.也希望老师能够在汇编这一方面多给我们指导.
除了微机相关的知识,我通过这个实验更深刻了体会了数字与模拟之间的关系和相互转换的规律.
参考资料
[1]李敬兆,8086/8088和arm核汇编语言程序设计中国科技大学出版社,2008
[2]张光长,汇编语言程序设计:
北京大学出版社,2009.7
[3]陈够喜等著,微机原理应用实验教程.北京:
人民邮电出版社,2006
[4]刘乐善,微型计算机接口技术及应用.武汉:
华中科技大学出版社,2004
[5]沈美明,温冬婵编著IBM—PC汇编语言程序设计(第二版)清华大学出版社
[6]张开成,微型计算机原理,西南师范大学出版社,2006.8
[7]谭硫安张雪兰,windows汇编语言程序设计教程:
电子工业大学出版社,2005.4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 汇编语言 程序设计