汇编课设报告之欧阳科创编.docx
《汇编课设报告之欧阳科创编.docx》由会员分享,可在线阅读,更多相关《汇编课设报告之欧阳科创编.docx(23页珍藏版)》请在冰豆网上搜索。
汇编课设报告之欧阳科创编
课程设计报告
时间:
2021.02.05
创作:
欧阳科
课程名称汇编语言程序设计
课题名称中断应用程序设计
专业计算机科学与技术
2010年9月5日
一、设计内容与设计要求
1.设计内容:
通过本周的课程设计,学生能够巩固所学的基础知识,并能够使学生更加熟练运用汇编程序设计语言来掌握综合汇编程序设计的方法和过程,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。
1、编制一计算比赛成绩的程序,要求完成以下功能:
(1)9名评委,每个评委给分范围为0~10(整数);
(2)9名评委给分中,去掉一个最高分和一个最低分,剩余7名评委的平均分即为参赛者的得分(精确到小数点二位);
(3)将得分在光标位置处显示出来。
2、编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30字的grade数组中,各数据的格式为:
学号,成绩1,成绩2,…,成绩5
然后根据grade中的学生成绩,把学生名次填入rank数据组中,并显示出来,格式为:
学号,名次
3、利用INT1CH(大约每秒中断18.2次)编写一个中断驻留程序,要求在屏幕的右上角显示计算机中当前系统时间,显示格式为
时:
分:
秒:
1/100秒
4、输入一个菱形的两条对角线长,在屏幕上用‘*’号画出一个彩色的菱形。
5、设置图形方式并显示彩条,要求:
选择背景色为蓝色,调色板为0,然后每行显示一种颜色,每四行重复一次,一直到整个屏幕都显示出彩条
2.设计要求:
掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。
1.设计正确,方案合理。
2.界面友好,使用方便。
3.程序精炼,结构清晰。
4.设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
5.上机演示。
6.按学号顺序选课题号,并在规定的时间内独自完成相关课题的汇编源程序编写、调整和运行。
源程序及编译生成各文件均保存在软盘中;
7.按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。
并用A4的复印纸打印并装订;
二、进度安排
第1周上机时间
星期1布置任务
星期28:
00—12:
00
星期38:
00—12:
00
星期48:
00—12:
00
附:
课程设计报告装订顺序:
封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:
一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。
一、课程的主要功能········································1
二、功能模块的划分········································2
三、主要功能的实现········································
四、程序调试·············································
五、总结·················································
六、附件·················································
1、课程的主要功能
1、课题的主要功能:
班级学生成绩处理主要要求我们从键盘输入一个班的成绩,包括学生的学号,学生的各科成绩(总共五科),将输入的学生信息存放在数组grade中,然后用编写的程序来实现计算和显示学生学号和名次的功能,为了实现该项功能,将通过计算每个学生的平均成绩,并将其进行排序来实现。
结果保存在rank数组中。
使用者可以根据具体的菜单选项进行操作。
例外,为了使程序大的功能较为完整点,为了让使用更好的使用该程序,我在原来的要求上增加了几个功能模块,如查询、删除和退出功能。
2、功能模块的划分
1、模块图
整个程序有5个功能模块构成,分别是输入信息模块、显示信息模块、查询信息模块、删除信息模块和退出菜单模块,他们之间的关系如下模块图所示:
ILSDQ
2、程序模块分析:
此程序主要分为大模块,包括主模块,输入模块和输出模块
1.主模块:
从键盘输入学生的学号、分数,并在屏幕上显示学生的学号和名次,其功能是根据输入的学生分数,计算并显示学生名次。
此处采用冒泡排序法,并且一个学生的名次等于分数高于该生的学生人数加1。
2.输入模块:
以学号为序从键盘输入学生分数,各个分数之间用逗号隔开,最后用回车符结束。
再把学生成绩存入grade数组。
其功能是接收学生的分数,并将从键盘输入的十进制数转换为二进制。
3.输出模块:
从RANK数组取得学生名次,把学生名次以学号为序在屏幕上显示,其功能是显示学生的名次。
4.查询模块:
此模块是根据输入的查询方式对存在文档里的信息进行查询,可以按学号查询或按成绩查询,并在屏幕上显示查询的信息。
5.删除模块:
删除模块是在查询模块的基础上对查询的内容进行删除。
3、主要功能的实现
一、功能模块的分析
此次班级成绩处理程序使用了5个功能模块,分别是输入信息模块、显示信息模块、查询信息模块、删除信息模块和退出菜单模块,使用者只需要根据界面的菜单提示选择进行相应的功能模块就可以了。
部分功能模块如下:
1.菜单功能源代码:
INPUT:
MOVAH,0
INT16H
CMPAH,26H;IS'L'?
JNZNEXT1
CALLLIST
JMPMAINLOOP
NEXT1:
CMPAH,17H;IS'I'?
JNZNEXT2
CALLINSERT
JMPMAINLOOP
NEXT2:
CMPAH,1FH;IS'S'?
JNZNEXT3
MOVSTATE,'S'
CALLSEARCH
JMPMAINLOOP
NEXT3:
CMPAH,20H;IS'D'?
JNZNEXT4
MOVSTATE,'D'
CALLSEARCH
JMPMAINLOOP
NEXT4:
CMPAH,10H;IS'Q'?
JNZINPUT
RET
此功能根据提示选择相应的选项进行操作,“S”为查询功能,“I”为输入功能,“D”为删除功能,“L”为显示功能,“Q”则退出选项。
2、输入功能模块部分代码
GETSTRMACROADDR
LOCALEXT,CHAR,SPACE
MOVBX,0
SPACE:
MOV&ADDR&[BX],0
INCBX
CMPBX,10
JLSPACE
MOVBX,0
CHAR:
MOVAH,1
INT21H
CMPAL,13
JZEXT
CMPAL,10
JZEXT
CMPBX,9
JGCHAR
MOV&ADDR&[BX],AL
INCBX
JMPCHAR
EXT:
ENDM
此输入信息模块用数组来接受学生信息,并且限制了信息的长度,在程序中可连续调用该模块来满足用户连续输入学生信息的要求,并将其信息存入到了grade数组中。
3、删除模块和查询模块有着大部分相同的代码,删除模块就包含了查询模块,它首先就必须根据输入的学生信息在文件数组里对信息进行查询后才能进行删除的操作,其部分代码为:
CMPLOOP:
MOVAH,14H
LEADX,MYFCB
INT21H
CMPAL,01
JNZNEXT
JMPEXITS
NEXT:
CLD
MOVAL,10
MULWAY
LEASI,VALUE
LEADI,N
ADDDI,AX
MOVCX,10
REPECMPSB
JNZCMPLOOP
SHOWPRINT
MOVFLAG,1
MOVCL,RECID
CMPSTATE,'D'
JNERETURN
DEL:
MOVAH,14H
LEADX,MYFCB
INT21H
CMPAL,0
JNZW_END
SUBRECID,2
MOVAH,15H
LEADX,MYFCB
INT21H
INCRECID
JMPDEL
W_END:
CLD
LEADI,MYDTA
MOVCX,50
MOVAL,0
REPSTOSB
SUBRECID,1
MOVAH,15H
MOVMYDTA,1AH
LEADX,MYFCB
INT21H
SHOWDELOK
RETURN:
MOVRECID,CL
JMPCMPLOOP
EXITS:
CALLCLOSEF
CMPFLAG,0
JNZEXT
SHOWNOTHIS
EXT:
MOVFLAG,0
POPDX
POPCX
POPBX
POPAX
RET
SEARCHENDP
查询或删除功能可以根据学生的学号或各科成绩来进行查询或删除,如果输入有误将提示:
error,无误的话就可以直接输入信息进行查询和删除的操作。
二、流程图举例:
查询功能模块流程图
SQ
4、程序调试
1.首先调试的时候,总是不能显示之前所输入的学生信息数据,每次都必须重新输入,通过请教老师同学得到了解决,在程序里使用了文件的管理,将每次的输入都增添在了文档里,每次输入、删除后的信息都保存在该文件中。
程序也用了“MYDTA LABEL BYTE"来建立学生信息的磁盘卷标,使程序更加完善。
2.这个程序要求写入信息并排学生名次,计算学生平均分倒是很简单,要是单独将平均分排序也不太难,问题是我不知道将其综合,名次老和学生学号对不上号,不过在老师的帮助下也得到了解决。
3.程序算法解决完了就是要注意一些较为基础的问题,在定义变量的时候不能用特殊的名称,否则会造成那很多错误,造成不必要的时间浪费。
4.我的程序菜单较为简单,调试时输入功能界面如下:
查询或删除功能的界面如下:
如图一所示,为输入错误的信息导致界面显示ERROR,图二则是正常的情况下运行的界面。
图一
图二
5、总结
此次汇编课程设计是在开学的第一周,虽说是已经开学了,但是学习状态可以说还是零。
当接到任务书时我的心里有说不出的高兴,班级学生成绩处理,这个课题对我来说再熟悉不过了,从大一的C课程设计到C++面对对象的课程设计,我一直做着与学生成绩相关的题目,虽然还没从假期的松散状态缓过来,但是一点也不怕,感觉自己能轻松完成这熟悉的课设,但是事实却让我不敢想象。
班级成绩处理程序设计要求从键盘输入学生的基本信息,如学生的学号、各科的成绩,然后将信息存入grade数组中,并要求处理数据将相应的学生学号和名次存放在rank数组中,并随时可以根据使用者的意思显示出来。
面对看上去这么简单的题目,我竟一开始写代码就不知道该怎么动笔。
我想首先用数组来存放学生的成绩,并通过编简单的程序计算每学生的平均,可却不知道该怎么将学生的学号和平均成绩捆绑在一起来进行排序。
想到方法又卡住了,就这样想了很久也没能解决问题。
要做好一个简单的程序首先就是要将思路想好,然后才能动笔编个好多程序,但是一开始我就没一个完整的思路,想到这我是越来越失去信心了。
不过在老师的精心辅导下,我还是努力完成了任务,没有放弃。
“汇编语言程序设计”是计算机专业的重要专业基础课,是从事计算机研究与应用的基础,是计算机专业必修的核心课程之一,为更好的培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力,对这门课开设了课程设计。
汇编语言程序设计是一门实践性很强的课,能很好的培养学生的创造性和动手能力,所以课程设计也是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,汇编语言已经成为当今计算机应用中空前活跃的领域,是很多技术的基础在生活中可以说得是无处不在。
所以认真做好这次课程设计对我们来说很重要,从中我也是收益很多。
也有很多感受。
首先,通过这次汇编语言程序设计,让我更深地体会到了上机操作有助于将书本上的知识系统化、现实化,更加锻炼了我自己的查漏补缺的能力。
书本上的知识永远是死的,只有将其运用到实际的生活中才会变成活的,而课设恰好给了我们这样一个机会。
其次,课程设计是一个综合性的课程,不仅能检测我们的学习这门课的熟练程度,还能让我们温习课程,达到复习和巩固的效果,在课程设计的过程中我们不断地遇到问题,不断的在图书馆和网上、书本上查找资料,不断的向老师、同学请教问题,所以慢慢的解决问题,而这就是一个不断提升自己的过程。
课程设计也教会了我们怎么样利用自己身边有的资源,如书本、网络、老师和同学,怎样和同学互相学习、互相帮助、互相合作。
总之,此次课程设计算是个较为完整的程序,将学到过的知识如中段程序、输入输出程序,DOS功能的调用,指令系统等综合起来,让我的知识更加系统化,只是还是存在些问题,相信有了这次课程设计,我的学习兴趣更大,一定会在今后的学习和生活中同样做到查漏补缺,争取做到更好。
6、附件
源程序清单:
DATASEGMENT
MYFCBLABELBYTE;file'sFCB
FDRIVERDB0
FNAMEDB'STUDENTS'
FEXTDB'MAO'
FBLOCKDW0
RECSIZEDW50
FSIZEDW2DUP(?
)
FDATEDW?
FPATHDB10DUP(?
)
RECIDDB0
RECBKDW2DUP(?
)
SELDB'ListInsertSearchDeletequit>>$'
PROMPTDB13,10,'Nums1s2s3s4s5$'
NUMDB13,10,'1.NUM:
$'
sb1DB13,10,'2.s1:
$'
sb2DB13,10,'3.s2:
$'
sb3DB13,10,'4.s2:
$'
sb4DB13,10,'5.s3:
$'
sb5DB13,10,'6.s3:
$'
ERRMSGDB13,10,'***ERROR!
***$'
WHICHDB13,10,'SELECTAWAY(1--5):
$'
STRINGDB13,10,'INPUTTHEVALUE:
$'
NOTHISDB13,10,'NOTHISSTUDENT!
$'
DELOKDB13,10,'THERECORDDELETSUCCESS!
$'
FLAGDB0
WAYDB?
STATEDB?
VALUEDB10DUP('')
PRINTDB13,10
MYDTALABELBYTE
NDB10DUP('')
s1DB10DUP('')
s2DB10DUP('')
s3DB10DUP('')
s4DB10DUP('')
s5DB10DUP('')
DB'$'
DATAENDS
SHOWMACROADDR
MOVAH,9
LEADX,ADDR
INT21H
ENDM
GETSTRMACROADDR
LOCALEXT,CHAR,SPACE
MOVBX,0
SPACE:
MOV&ADDR&[BX],0
INCBX
CMPBX,10
JLSPACE;小于10就转移,即BX连续自增(限制数组中一个元素的长度)
MOVBX,0
CHAR:
MOVAH,1
INT21H;输入的一个字符放到AL中
CMPAL,13
JZEXT
CMPAL,10
JZEXT;输入回车键和空格键的话就退出输入
CMPBX,9
JGCHAR;大于9再次输入
MOV&ADDR&[BX],AL;将输入的数据放在ADDR数组中
INCBX
JMPCHAR
;最长输入10个元素
EXT:
ENDM
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
MAINPROCFAR
PUSHDS;将DS进栈
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAH,1AH
LEADX,MYDTA
INT21H
JMPINIT;
MAINLOOP:
MOVAH,1
INT21H;输入一个字符保存在AL中
CMPAL,''
JNEMAINLOOP;AL不为空格键就转移再次输入,即输入空格键就结束了
INIT:
MOVAH,6;屏幕初始化
MOVAL,0
MOVCH,0
MOVCL,0
MOVDH,24
MOVDL,79
MOVBH,7
INT10H
MOVAH,2;置光标位置
MOVDH,1
MOVDL,1
MOVBH,0
INT10H
SHOWSEL;显示目录
INPUT:
MOVAH,0
INT16H;建文件
CMPAH,26H;是'L'?
JNZNEXT1
CALLLIST
JMPMAINLOOP
NEXT1:
CMPAH,17H;是'I'?
JNZNEXT2
CALLINSERT
JMPMAINLOOP
NEXT2:
CMPAH,1FH;是'S'?
JNZNEXT3
MOVSTATE,'S'
CALLSEARCH
JMPMAINLOOP
NEXT3:
CMPAH,20H;是'D'?
JNZNEXT4
MOVSTATE,'D'
CALLSEARCH
JMPMAINLOOP
NEXT4:
CMPAH,10H;是'Q'?
JNZINPUT
RET
MAINENDP
LISTPROCNEAR;列出学生信息
CALLOPENF
MOVRECID,0
CMPFLAG,0
JZCONTINUE
RET
CONTINUE:
SHOWPROMPT
LISTLOOP:
MOVAH,14H
LEADX,MYFCB
INT21H
CMPAL,01
JNEN1
JMPFINISH
N1:
CMPAL,0
JEN2
JMPFINISH
N2:
SHOWPRINT
JMPLISTLOOP
FINISH:
CALLCLOSEF
RET
LISTENDP
INSERTPROCNEAR;插入学生的信息
MOVRECID,0
CMPFLAG,0
JZREADL
RET
READL:
MOVAH,14H
LEADX,MYFCB
INT21H
CMPAL,01
JEWRITES
CMPAL,0
JEREADL
WRITES:
SHOWNUM;插入学生信息
GETSTRN
SHOWsb1
GETSTRs1
SHOWsb2
GETSTRs2
SHOWsb3
GETSTRs3
SHOWsb4
GETSTRs4
SHOWsb5
GETSTRs5
MOVAH,15H;写入文件
LEADX,MYFCB
INT21H
CALLCLOSEF
RET
INSERTENDP
SEARCHPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
CALLOPENF
MOVRECID,0
CMPFLAG,0
JZSTART
RET
START:
SHOWNUM
SHOWsb1
SHOWSb2
SHOWsb3
SHOWsb4
SHOWsb5
SHOWWHICH
INWAY:
MOVAH,1;根据查找选项查询学生信息
INT21H
CMPAL,'1'
JLINWAY
CMPAL,'5'
JGINWAY
SUBAL,31H
MOVWAY,AL
SHOWSTRING
GETSTRVALUE
SHOWPROMPT
CMPLOOP:
MOVAH,14H
LEADX,MYFCB
INT21H
CMPAL,01
JNZNEXT
JMPEXITS
NEXT:
CLD
MOVAL,10
MULWAY
LEASI,VALUE
LEADI,N
ADDDI,AX
MOVCX,10
REPECMPSB
JNZCMPLOOP
SHOWPRINT
MOVFLAG,1
MOVCL,RECID
CMPSTATE,'D'
JNERETURN
DEL:
MOVAH,14H;将查询到的信息删除
LEADX,MYFCB
INT21H
CMPAL,0
JNZW_END
SUBRECID,2
MOVAH,15H
LEADX,MYFCB
INT21H
INCRECID
JMPDEL
W_END:
CLD
LEADI,MYDTA
MOVCX,50
MOVAL,0
REPSTOSB
SUBRECID,1
MOVAH,15H
MOVMYDTA,1AH
LEADX,MYFCB
INT21H
SHOWDELOK
RETURN:
MOVRECID,CL
JMPCMPLOOP
EXITS:
CALLCLOSEF
CMPFLAG,0
JNZEXT
SHOWNOTHIS
EXT:
MOVFLAG,0
POPDX
POPCX
POPBX
POPAX
RET
SEARCHENDP
OPENFPROCNEAR;打开或建立文件
MOVAH,0FH
LEADX,MYFCB
INT21H
ORAL,AL
JNZCREATE
RET
CREATE:
时间:
2021.02.05
创作:
欧阳科