汇编语言课程设计报告.docx
- 文档编号:23595777
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:38
- 大小:133.55KB
汇编语言课程设计报告.docx
《汇编语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计报告.docx(38页珍藏版)》请在冰豆网上搜索。
汇编语言课程设计报告
课程设计报告
课题名称:
学生成绩管理程序
学生姓名:
XX
学 号:
XXX
专 业:
计算机科学与技术
指导教师:
XXX
时 间:
2010年6月12日至25日
目录
课程设计报告1
1、题目及要求2
1.3课题背景2
2、运行环境(软、硬件环境)3
3、功能设计(功能模块及模块图)3
3.1各模块的主要功能3
4、详细设计4
4.1程序功能4
4.2各模块的程序流程图5
7
4.3本设计的重点、难点及解决方法8
5、总结8
6、源程序9
1、题目及要求
1.1题目:
学生成绩管理程序
1.2要求
设计一个学生管理程序,要求实现以下功能
(1)各科成绩的录入、修改、和删除。
(2)按姓名查询每个学生哥们成绩。
(3)显示查询结果
(4)统计各分数段的成绩的人数个分数段的人数。
1.3课题背景
1.3.1汇编语言的优点
汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。
汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。
使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。
目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。
汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。
但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。
1.3.2课题意义
当今社会是一个信息时代的社会,计算机的使用也是越来越普遍了,各行业在管理职员都采用了一些管理软件,不管是银行、学校,大大小小的各种企业,都是使用的相应的管理软件管理企业的各种信息,我选择的这个汇编语言课程设计题就是一个简单学生信息管理程序,虽然只能处理一些简单操作,但是其意义却是非凡,同过此课程设计,让我了解了一些简单的管理软件的基本原理,更深刻的理解了汇编语言的特点,对汇编语言有了一个跟深层次的理解。
1.3.3主要研究内容和功能
利用汇编程序编写一个小型学生成绩管理程序,实现学生信息成绩的插入、修改、显示所有学生的各科成绩,并且可根据输入学生姓名插询该生的各科成绩,可统计所有成绩个各分数段的人数。
2、运行环境(软、硬件环境)
硬件:
8086以上CPU,内存256M以上。
软件:
WINDOWS操作系统,MASM,LINK汇编编译链接软件。
3、功能设计(功能模块及模块图)
3.1各模块的主要功能
3.1.1main主程序模块
用于对各种操作的调用,如插入、删除、显示所有学生的各科成绩等。
3.1.2Insert子程序插入模块
用于实现对新增学生的插入,插入至学生文本中,使用时需要调用get_rec子程序实现从键盘输入一个学生的信息。
3.1.3get_rec子程序模块
主要被Insert子程序调用,用于从键盘输入一个学生的信息
3.1.4query子程序模块
根据学生姓名查询学生的各科成绩,学生姓名由键盘输入,再从文件中一次比较找出要查询学生的信息。
3.1.5modify子程序模块
首先从键盘输入要修改的学生信息,在从学生文件中寻找要修改的学生姓名,并将要修改后的信息写入文件。
3.1.6delete子程序模块
由用户输入要修改学生的姓名,从学生文件中找出要删除的学生信息,将该学生的各项信息置为0,实现删除的操作。
3.1.7list子程序模块
用于显示学生文件中所有学生的各科成绩的信息,每次从文件读取一个学生的信息并显示。
3.1.8coun子程序模块
用于对学生各科成绩的各分数段的统计。
4、详细设计
4.1程序功能
程序运行时,在出现的主菜单中,按l键,将浏览学生的各科成绩;按i键后,将执行插入功能,可以插入新的学生成绩,按m键,键输入需要修改的学生成绩,也包括不修改的科目;按d键输入要删除的学生姓名,将使其成绩全部变成0;按q键输入查询的学生的姓名,将其各科成绩显示出来;按下c键将按数学成绩分段结果。
以上功能单独运行可以实现,(即在进入菜单后选择其中一项功能运行可以成功运行,在关闭后选择另一项功能可以成功运行),但是在整体运行时得不到想要的结果。
所以如果输入有误,按退格键后将会出错,但是此程序没有处理错误的功能,因此再输入时要特别注意。
注:
此程序除了源程序外还需要一个学生文件,该程序命名为score.txt,该文件用于存放学生信息,在源程序中程序数据段中fname的值应与文件的存放位置一致。
4.2各模块的程序流程图
N
list流程图insert流程图
query流程图
Modify流程图
N
coun流程图
主程序流程图
4.3本设计的重点、难点及解决方法
4.3.1重点难点
开始拿到课题感觉很简单,主要是因为以前C语言曾经做过类似的题,思路大概差不多,但是实际下笔写的时候,遇到的最大的困难对于一些系统调用存在很大的问题,对DOS和BIOS的系统调用还比较模糊,在使用时DOS和BIOS中的系统功能调用不是很熟悉,所以需要先理解这些后,然后才正式开始写程序
开始写好了程序的主干,实现了主要功能,在写插入、查询等功能时遇到了一些问题,但通过仔细琢磨和请教老师、同学,最终还是成功解决,完成程序后,就开始了程序的编译,找错、改错、链接等,但是程序有些地方还是不是很完善。
4.3.2调试过程
1)编译源文件,命名为s.ASM。
2)采用命令格式。
MASMs.ASM将生成一个OBJ文件,检查源程序中的错误,并改正。
3)键入连接命令:
LINKcjgl.OBJ,回车,即可生成s.exe可执行文件。
4)执行s.exe选择其一功能,能正常执行,在关闭后,在进入运行别的功能。
5、总结
通过对这学生成绩管理的的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。
通过查阅资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。
这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。
但这次是一个综合的程序,平时的很多程序都用到了。
历时两周终于完成,其间有不少感触。
这次课程设计中有很多源程序的子程序的源代码可以从资料中或获得,但有很多都需要我们仔细琢磨才能明白其中的原理,同时程序中需要调用大量的BIOS和DOS系统功能调用,如显示字符串的功能调用、光标设置的功能的调用、清屏的功能调用等,这些问题如不查询资料就无法理解,因为上汇编语言基础时对这些DOS和BIOS的系统功能了解很少,所以我们需要查询DOS和BIOS功能的系统调用的基本信息。
还有在一些循环结构设计上也有许多不能理解的地方,都需要加以深刻的理解才能将问题顺利的解决,多整个程序的理解也有了更进一步的了解。
有时候遇到自己查资料和不能理解的地方时,自己不能解决时,先找同学讨论一下,会有意想不到的收获,有些问题就会迎刃而解,有时也会遇到比较顽固的问题,大家冥思苦想,也找不出一个令人满意的答案,但是通过询问老师,查阅更多的资料,问题也最终得到了解决。
当这些问题得到解决时,心情是一种豁然开朗、柳暗花明又一村的旷达。
这次课程设计的大部分程序,都可以在书上找到,这对我们的程序设计很有帮助,从这些资料中,我们可以看出这个学生管理程序的基本主干,修改某些地方就可以实现改程序的基本功能,不可否认,本程序仍然存在不少缺点和不足,但通过这次的课程设计找出了自己在学习上的不足,有些地方仍然还存在许多问题,但是我相信通过努力,在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!
6、源程序
datasegment
mess1db'studentgrademanagementsystem',0ah,0dh,'$'
mess2db'thisismainmenu',0ah,0dh,'$'
mess3db'insert(i)name:
',0ah,0dh,'$'
mess4db'modify(m)maths(a):
',0ah,0dh,'$'
mess5db'delete(d)English(b):
',0ah,0dh,'$'
mess6db'query(q)computer(c):
',0ah,0dh,'$'
mess7db'count(c)Chinese(d):
',0ah,0dh,'$
mess8db'exit(e)',0ah,0dh,'$'
mess9db'**********************************************************$'
mess10db'**********************************************************$'
mess11db'nameMaEnCoCh',0ah,0dh,'$'
mess13db'list(l)pleaseinput:
',0ah,0dh,'$'''
mess12db'maths<60<70<80<90<100',0ah,0dh,'$'
err1db'thereisnotthisstudent$'
err2db'fileclosewrong$'
fnamedb"e:
\masm5\score.txt"
buffer1db23dup(?
)
buffeerdb0ah,0dh,'$'
buffer2db30dup(?
)
buffer3db8dup('0')
countdb5
handledw?
deldb8dup('0')
xdb?
dataends
showmacroaddrs;显示字符串
leadx,addrs;取得字符串的入口地址
movah,9;调用dos系统功能的9号功能
int21h
endm
set_p1macroa;设置光标位置(将光标设置在指定行第36列处)
movah,2;调用BIOS系统功能2号功能
movdh,a
movdl,36
movbh,0;页号
int10h
endm
set_p2macro;设置光标位置(将光标位置设置在12行第2列处)
movah,2;调用BIOS系统功能
movdh,12
movdl,2
movbh,0
int10h
endm
set_p3macro;设置光标位置(将光标位置设置在第一行第30列处)
movah,2
movdh,1
movdl,30
movbh,0
int10h;调用BIOS系统功能号2号功能设置光标位置
endm
clearmacro;清除全屏
moval,0
movcl,0
movch,0左上角坐标
movdh,24
movdl,79
movbh,7右下角坐标
movah,6
int10h;调用BIOS功能6号功能清除全屏
endm
clear1macro;清除定义靠左边的部分屏幕
moval,0
movbh,7卷入行属性
movch,4
movcl,36
movdh,10调用BIOS系统功能清楚定义靠左边的屏幕
movdl,79
movah,6
int10h
endm
clear2macro;清除定义靠下边部分屏幕
moval,0
movbh,7卷入行属性
movch,12
movcl,0
movdh,24
movdl,79
movah,7
int10h;调用BIOS系统功能7号功能
endm
newlinemacro;输出换行符
pushax
pushdx
movdl,0dh
movah,2调用DOS系统功能2号功能显示单字符输出
int21h
movdl,0ah输出换行符(其ACSII值为oah,odh)
movah,2
int21h
popdx
popax
endm
show_itemmacroaddrs;定义显示学生信息的宏
localiloop,w10
pushbx
pushcx
movbx,0
iloop:
movdl,addrs[bx]
movah,2调用DOS系统功能的2号功能显示字符
int21h
incbx
cmpbx,15;判断是否显示了15个字符
jliloop
movcx,4
w10:
movdl,''
movah,2
int21h
movdl,''
movah,2;调用DOS系统功能的2号功能连续显示三个空格
int21h
movdl,''
movah,2
int21h
movdl,addrs[bx]
movah,2;调用DOS系统功能的2号功能显示一个字符
int21h
incbx
movdl,addrs[bx]
movah,2;调用DOS系统功能的2号功能显示一个字符
int21h
incbx
loopw10
newline
popcx
popbx
endm
getinmacroaddrs,count2;定义输入学生信息的宏
localzeroit,lp,input_end,exit
pushbx
pushax
movbx,0
zeroit:
movaddrs[bx],''
incbx
cmpbx,15
jlzeroit
movbx,0
lp:
movah,1;调用DOS系统功能从键盘输入字符al中并且显示字符
int21h
cmpal,0ah
jzinput_end
cmpal,0dh;判断字符是否为回车键
jzinput_end
movaddrs[bx],al
incbx
cmpbx,count2;判断是否输入够指定的字符个数
jllp
input_end:
cmpal,0dh
jzexit判断是否为空格
cmpal,0ah
jzexit
movah,7;调用DOS系统功能的7号功能从键盘输入字符不显示字符
int21h
jmpinput_end
exit:
popax
popbx
endm
codesegment
mainprocfar;主程序段
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
movah,0;调用BIOS系统功能的0号功能设置显示方式
moval,3;以80×25的彩色方式显示
int10h
clear;清除全屏
showmess1
showmess2
newline
showmess13
showmess3
showmess4
showmess5显示主菜单界面
showmess6
showmess7
showmess8
showmess9
showmess10
set_p3;调用宏设置光标位置
w:
movah,7;调用DOS系统功能从键盘输入一个字符不显示
int21h
cmpal,'i'
jnzn1
callinsert;若输入字符为i则调用insert子程序段
jmpw
n1:
cmpal,'m'
jnzn2
callmodify
jmpw
n2:
cmpal,'d'
jnzn3
calldelete;若输入字符为d则调用delete子程序段
jmpw
n3:
cmpal,'q'
jnzn4
callquery
jmpw
n4:
cmpal,'c'
jnzn6
callcoun;若输入字符为c则调用coun子程序段
jmpw
n6:
cmpal,'l'
jnzn7
calllist
jmpw
n7:
cmpal,'e';输入字符为e则退出程序
jzexitf
jmpw
exitf:
movah,4ch;调用DOs系统功能的4Ch号功能输出结束码
int21h
ret
mainendp
insertprocnear;插入学生信息
pushax
pushbx
pushcx
pushdx
movdx,offsetfname;打开文件的路径的字符串入口地址给dx
moval,2
movah,3dh;调用DOS系统功能的3dh号功能打开文件
int21h
movbx,ax
clear1
set_p14
callget_rec
movcx,0;调用DOS系统功能的42h号功能将文件指针移动到文件末尾
movdx,0
moval,2
movah,42h
int21h
movcx,23;调用DOS系统功能的40h号功能写文件
movdx,offsetbuffer1
movah,40h
int21h
movah,3eh;调用DOS系统功能的3eh号功能关闭文件
int21h
set_p3
popdx
popcx
popbx
popax
ret
insertendp
get_recprocnear;从键盘输入获取学生信息段
pushax
pushbx
getinbuffer2,15;从键盘输入学生姓名
movbx,0
movcx,15
continue:
moval,buffer2[bx];
movbuffer1[bx],al;将从键盘输入的学生姓名写入buffer1中
incbx;
loopcontinue
set_p15;将光标设置在第五行36列处
getinbuffer2,2;从键盘输入学生的数学成绩
moval,buffer2
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
moval,buffer2+1
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
set_p16;将光标设置在第6行36列处
getinbuffer2,2;从键盘输入学生的英语成绩
moval,buffer2
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
moval,buffer2+1
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
set_p17;将光标设置在第7行36列处
getinbuffer2,2;从键盘输入学生的计算机成绩
moval,buffer2
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
moval,buffer2+1
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
set_p18;将光标设置在第8行36列处
getinbuffer2,2;从键盘输入学生的语文成绩
moval,buffer2
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
moval,buffer2+1
movbuffer1[bx],al;将从键盘输入的成绩写入buffer1中
incbx
popbx
popax
ret
get_recendp
queryprocnear;根据学生姓名查询学生信息
pushax
pushbx保护个寄存器的值
pushcx
pushdx
clear1
clear2
movdx,offsetfname
moval,2
movah,3dh;调用DOS系统功能打开文件
int21h
movbx,ax
set_p2
getinbuffer1,15;从键盘输入学生姓名
b:
movah,3fh;调用DOS系统功能的3fh号功能读取一个学生(23个字节)的信息
movcx,23
movdx,offsetbuffer2
int21h
cmpax,0;判断文件是否读取完(ax=0则文件读取完毕)
jzs1;读取完毕则退出
leasi,buffer2
leadi,buffer1
movcx,15
c:
moval,byteptr[si]
cmpal,byteptr[di];判断输入的字符与文件中的姓名是否一致找出要查询的学生姓名
jnzb;不匹配则继续从文件读取
incsi;当前字符一致则继续比较下一个字符
incdi
loopc
mov[buffer2+23],'$'
leadx,mess11
movah,9;调用DOS的9号功能显示字符串
int21h
show_itembuffer2;显示查询到的学生信息
jmps2;显示学生信息后转至关闭文件处
s1:
set_p2
showerr1;显示错误信息(没有找到查询的学生)
s2:
movah,3eh;调用DOS系统功能的3eh号功能关闭文件
int21h
set_p3;设置光标位置
popdx
popcx
popbx恢复个寄存器的值
popax
ret
queryendp
modifyprocnear;修改学生信息
pushax
pushbx
pushcx保护各寄存器的值
pushdx
clear1
set_p14;将光标设置在第四行
movdx,offsetfname;将要打开文件的的路径的字符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 课程设计 报告