班级成绩处理与时间显示程序.docx
《班级成绩处理与时间显示程序.docx》由会员分享,可在线阅读,更多相关《班级成绩处理与时间显示程序.docx(28页珍藏版)》请在冰豆网上搜索。
班级成绩处理与时间显示程序
课程设计报告
课程名称汇编语言程序设计
课题名称班级成绩处理与时间显示程序
专业计算机科学与技术
班级
学号
姓名
指导教师
2013年1月8日
湖南工程学院
课程设计任务书
课程名称汇编语言程序设计
课题班级成绩处理与时间显示程序
专业班级
学生姓名
学号
指导老师
审批
任务书下达日期2013年1月5日
任务完成日期2013年1月13日
一、设计内容与设计要求
1、课程设计目的
通过本周的课程设计,学生能够巩固所学的基础知识,并能够使学生更加熟练运用汇编程序设计语言来掌握综合汇编程序设计的方法和过程,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。
2、课程设计课题环境
一台硬件配置为586以上电脑,在操作系统为WINDOWS98/XP/2000等的环境下,使用汇编程序设计语言来完成该任务。
3、设计内容与设计要求
(注:
根据本人学号22号,加上学习的特点,本人做的课题有:
课题二:
班级成绩处理程序【必选】)、课题三:
时间显示程序【任选】、
课题一:
编制一计算比赛成绩的程序。
要求完成以下功能:
(1)9名评委,每个评委给分范围为0~100(整数);
(2)9名评委给分中,去掉一个最高分和一个最低分,剩余7名评委的平均分即为参赛者的得分(精确到小数点二位);
(3)将得分在光标位置处显示出来。
课题二:
班级成绩处理程序。
编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30字的grade数组中,各数据的格式为:
学号,成绩1,成绩2,…,成绩5
然后根据grade中的学生成绩,把学生名次填入rank数据组中,并显示出来,格式为:
学号,名次
课题三:
时间显示程序。
利用INT1CH(大约每秒中断18.2次)编写一个中断驻留程序,要求在屏幕的右上角显示计算机中当前系统时间,显示格式为
时:
分:
秒:
1/100秒
课题四:
图形显示程序。
输入一个菱形的两条对角线长,在屏幕上用‘*’号画出一个彩色的菱形。
课题五:
显示模式设置程序。
设置图形方式并显示彩条,要求:
选择背景色为蓝色,调色板为0,然后每行显示一种颜色,每四行重复一次,一直到整个屏幕都显示出彩条。
设计要求:
掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。
(1)、设计正确,方案合理。
(2)、界面友好,使用方便。
(3)、程序精炼,结构清晰。
(4)、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
(5)、上机演示。
(6)、按学号顺序选课题号,并在规定的时间内独自完成相关课题的汇编源程序编写、调整和运行。
源程序及编译生成各文件均保存在软盘中;
(7)、按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。
并用A4的复印纸打印并装订;
(8)、每个学生选两个课题(其一学号除以5的余数【必选】,其二根据自己实际情况任选其四道中的一题)
四、课程设计时间安排
1、时间:
18星期天 上午(8:
00-18:
00)(1月6号)
19周星期二上午:
(8:
00-12:
00)(1月8号)
2、指导老师:
唐北平
二、课题的主要功能
根据课程设计任务书要求,我选择了课题2和课题3进行设计。
课题2
本程序以microsoft visualbasic作为开发平台,根据课题要求,实现了学生基本情况录入,对学生成绩的查询,修改,删除功能。
三、课题的功能模块
四、主要功能实现
1、班级成绩管理程序模块图
学生成绩录入及查看
学排键屏排
号名盘幕序
初出输功
始始入输能
化化出
2、班级成绩管理程序模块图
五、上机调试
在程序的整个调试过程中我遇到了很多困难,有时候忘记使用DOS提供的INT21H中断功能调用,引号打错或者忘记写了,在输入的过程中也会有错误,这样的错误是很难找的,还有就是在语句后面加的注释,应该要用英语里面的分号,我刚开始用的是汉语里面的分号,结果调试的时候就同时出现了五十几个错误等等,经常会犯一些这种小错误。
在调试的时候遇到大问题是最麻烦的,因为第一个课题是计算比赛程序,其中最难实现的就是最后的结果要精确到小数点后两位,存储起来会比较麻烦,这个问题必须解决。
不过最后这个程序的功能要求还是没有实现。
1)BIOS功能调用INT10H
在BIOS功能调用INT10H中,AH=02H(置光标位置)和AH=06H(当前显示页上滚)也许是我的程序中用得最多的两个功能号了。
在进入了通讯录界面后怎样使光标到达指定的位置来完成操作呢?
功能号AH=02H很好的解决了这个问题。
DH=光标所在行,DL=光标所在列,BH=光标所在页,三个入口参数控制了光标的位置。
功能号AH=06H有什么作用呢?
AL=滚动的行数,CH=左上角行数,CL=左上角列数,DH=右下角行数,DL=右下角列数,BH=上滚时添补的空行的属性,07H为正常,70H为反显,这五个入口参数控制形成了一个矩形的信息窗口。
2)DOS功能调用
文件知识是以前没有接触过的,成绩管理系统中的信息是存放在文件中的,怎样调用文件中的内容和向文件中添加内容呢?
又怎样关闭文件呢?
成绩管理文件是事先存在的,所以只要用到3DH打开已存在的成绩文件,其中AH=3DH,AL=存取方式代码,DS:
DX指向文件路径名的ASCLL码串。
3EH则用以关闭用打开的文件,对文件添加学生信息则使用3FH,CX=所要读入字节数,DX为存放读入信息的内存地址。
同样的40H对文件或设备进行写操作。
3)宏定义和过程调用
在成绩管理系统源程序中我都使用了宏定义和过程使整个程序分成了若干个模块。
为什么要使用宏定义和过程调用呢?
使用宏定义和过程调用会使繁杂的程序容易读懂和理解,也使写程序的思路清晰
4)班级成绩处理程序各界面:
输入数据界面
程序排序界面
5)时间显示程序界面
六、心得体会
差不多一周的课程设计结束了,但我的心情却极其复杂,我高兴是因为通过一周的努力终于完成了课程设计的任务;但我又非常的伤感,那是因为这次的课程设计让我感觉到前所未有的吃力,这样的吃力不单单是在对基础知识理解得不全面,不系统所造成的。
“汇编语言程序设计”是计算机专业的重要专业基础课,是从事计算机研究与应用的基础,是计算机专业必修的核心课程之一,为更好的培养学生综合能力的课程之一。
其中课程设计是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,汇编语言已经成为当今计算机应用中空前活跃的领域,是很多技术的基础在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握汇编语言是十分重要的。
刚开始做课程设计的时候,看着任务书感到非常的茫然,不知道也不清楚该从何下手,查资料,看课本几乎用了我一半的课程设计时间。
到真正上机调试的时候,问题又接二连三的出现。
先是对应用软件使用的不了解,导致了上机很被动,在老师和同学的帮助下,才能勉强把自己的思路在软件上表述出来。
其次,在课程设计出现问题时,不知道该如何快速的查找错误出处,导致了时间上的浪费。
虽然在老师和同学的帮助下,最后被动,勉强的完成了课程设计任务,但在期间所体现出来的问题,却让我有一种“晴天霹雳”的感觉。
在课程设计时,我也找到了一些问题的所在,不单单是对平时的知识的学习,还有平时学习的方法。
课程设计是为了我们把平时所学的知识运用到实际中去,但当课程实际刚开始时候,我们就出现了“无从下手”的问题,好像平时所学的知识根本用不上。
这些问题的出现一方面是我平时知识的掌握不够牢固所造成的;另一方面,是因为在平时的学习中,课本与实践的结合过少所引起的。
正是由于平时和实践联系得少,不了解所学知识运用到实践中的途径,当用到的时候又不知道该怎么用已经成为我们现在所面临的问题,如何解决这一问题,将成为我们以后学习和思考的另一问题。
通过这周的课程设计更让我感受到:
一.通过这次课设实践,让自己又温习了一遍汇编语言程序设计的知识,最重要的是实践中让自己的能力比以前要有所提升。
这次的课设让我明白了程序设计思路、主要数据结构、主要的流程实施图等对于一个程序来说是相当的重要。
只要是方向弄正确了,会达到事半功倍的效果。
我想说的是,在你有个明确的方向时,你应该坚持到最后,成功将是你的。
不只生活是那样,做程序也是那样。
二.上机操作实践,有助于书本知识的系统化,现实化,更有利于自己的察缺补漏。
书本上的知识是死的,能够在现实中运用的知识才是活的。
在平时的课本知识学习过程中,由于受很多其他因素的影响,同学们学着学着就丧失了学习的兴趣,学的是一塌糊涂,情况很不乐观。
平时学习比较扎实的同学,通过上机操作完成一项完整的程序设计后,可以从实践中理解汇编语言这门课的本质的东西,进而系统完善自己的知识体系,更能从中找到自己得缺陷与不足,并加以补足改正,而学习不太扎实一点的学生,由此也加深了对这一门课的认识,学习兴趣也瞬间大增。
三.另外,就是我对这门课内容的学习感受。
要学好这门课,以我愚见无非有以下三点:
1)课本上应该记住的东西一定要记住,记不住就没法做题,(例如指令,寻址方式等等)若记住你做题就会做,看程序也就能看懂,记不住见了它就会对它不知所措,一脸茫然。
2)预习很重要,这一点不仅适用于这一科的学习,确切的说它适用于任何一科,有的同学这一点作的不好,上课只知道竖着两个耳朵傻傻的听老师讲课,也不注意动动脑子随时思考,延续以前填鸭式的学习方式,想让老师讲给所有的东西,殊不知很多东西还要自己从书本获得。
这就难免出现听不懂的情况,这好比让一个不懂外语的人听外语录音,在他的心里,听外语就像听天书一般,所以说你要学一点新东西,前提是你对它要有一点了解,不然的话你所作的一切只不过是在浪费时间,浪费金钱,浪费生命。
3)理论与实践相结合,不懂的地方应勤问老师勤问同学,直到把它搞懂为止。
课程设计是结束了,问题的所在也知道,但在以后的学习中该如何改进却成为了我们新的“课程设计课题”。
课程设计不单单是检验我们平时所学的知识,更主要的是让我发现了我们身上所存在的问题,解决这些问题,不仅仅能帮组我们学习好一门知识,更能帮助我们在以后的生活和工作中进步。
七、附录(原程序)
课题2(班级成绩管理程序)
;=======================================以下是宏定义区
PRINT_ENTERINGMACRO;---------定义回车换行宏
MOVAH,02H
MOVDL,0AH
INT21H
MOVDL,0DH
INT21H
ENDM
;\\\\\\\\\\\\\\\\\\\\\\\\
THREE_SPACEMACRO;------------三个空格
MOVDL,20H
MOVAH,02H
INT21H
INT21H
INT21H
ENDM
;========================================
;========================================
DATASSEGMENT
;此处输入数据段代码
;========================================以下是数据存储区
NEQU5;------------------定义字符
NAME1DBNDUP(14DUP(0),'$')
GRADEDBNDUP(0)
RANKDBNDUP(0)
NUMBERDBNDUP(0)
BUFDB0;---------字符缓存去
BUFFERDB14,?
14DUP(0);---输入缓存区
BUFFER2DB15DUP(0);--------名字交换缓存
;========================================以下是输入提示区
NAME_PROMPT_1DB"NAME:
$"
GRADE_PROMPT_1DB"GRADE:
$"
RANK_PROMPT_1DB"RANK:
$"
NUMBER_PROMPT_1DB"NUMBER:
$"
;========================================以下是输出提示区
NAME_PROMPT_2DB"NAME$"
GRADE_PROMPT_2DB"GRADE$"
RANK_PROMPT_2DB"RANK$"
NUMBER_PROMPT_2DB"NUMBER$"
OUT_NUMBERDB10,13,"Hereisrankbythenumberofthestudents:
",10,13,'$'
OUT_GRADEDB10,13,10,13,"Hereisrankbythegradeofthestudents:
",10,13,'$'
;========================================以下是更改提示区
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
;=========================================主函数对各函数的调用
;此处输入代码段代码
CALLKEY_GRADE
;LEADX,GRADE;--------------成绩内存单元查看(调试检查)
CALLNUMBER_RANK_INITIALIZE
;LEADX,NUMBER;--------------学号内存单元查看
;LEADX,RANK;--------------排名内存单元查看
MOVAX,0003H;--------------清屏...
INT10H
MOVDX,OFFSETOUT_NUMBER
MOVAH,09H
INT21H
CALLPRINT_OUT_NUMBER
CALLRANK_GRADE
LEADX,OUT_GRADE
MOVAH,09H
INT21H
CALLPRINT_OUT_RANK
;=========================================结束主函数…
MOVAH,4CH
INT21H
;=========================================获得键盘输入
KEY_GRADEPROCNEAR
MOVCX,N
MOVSI,0
GET_GRADE:
PUSHCX
PUSHSI
MOVCX,14
LEADX,NAME_PROMPT_1
MOVAH,09H
INT21H
LEADX,BUFFER
MOVAH,0AH
INT21H
movsi,offsetBUFFER
moval,[si+1]
xorah,ah
addsi,2
addsi,ax
movbyteptr[si],0
POPSI
PUSHSI
MOVAL,15
MOVBX,SI
MULBL
MOVBX,AX
LEADI,NAME1[BX]
LEASI,BUFFER[2]
CLD
REPMOVSB
MOVCX,15
MOVAX,0
LEADI,BUFFER[1]
REPSTOSB
POPSI
POPCX
PRINT_ENTERING
LEADX,GRADE_PROMPT_1
MOVAH,09H
INT21H
MOVAH,01H
INT21H
SUBAL,30H
XORAH,AH
MOVBL,10
MULBL
MOVBUF,AL
MOVAH,01H
INT21H
SUBAL,30H
ADDBUF,AL
MOVAL,BUF
MOVGRADE[SI],AL
INCSI
PRINT_ENTERING
DECCX
CMPCX,0
JNEGET_GRADE
RET
;LEADX,GRADE;----------调试查看内存
KEY_GRADEENDP
;=========================================
;=========================================学号排名初始化
NUMBER_RANK_INITIALIZEPROCNEAR
MOVCX,N
MOVSI,0
_NUMBER:
MOVAL,N+1
SUBAL,CL
MOVNUMBER[SI],AL;--------使学号递增即:
1,2,3,4,5
MOVAL,N
XORAH,AH
SUBAX,SI
MOVRANK[SI],AL;-----------使名次递减即:
5,4,3,2,1
INCSI
LOOP_NUMBER
RET
NUMBER_RANK_INITIALIZEENDP
;==========================================
;==========================================成绩排序函数
RANK_GRADEPROCNEAR
CLD
MOVCX,N-1
FIRST:
PUSHCX
MOVSI,0
SECOND:
MOVAL,GRADE[SI]
CMPAL,GRADE[SI+1];-------------分数比较
JNBGRATE
INCSI
LOOPSECOND
POPCX
LOOPFIRST
RET
GRATE:
PUSHSI
XCHGAL,GRADE[SI+1]
XCHGAL,GRADE[SI];-------------分数交换
MOVAL,NUMBER[SI]
XCHGAL,NUMBER[SI+1];---------学号交换
XCHGAL,NUMBER[SI]
MOVAX,15
MOVBX,SI
MULBL
MOVBX,AX
PUSHCX
MOVCX,15
LEASI,NAME1[BX];-------------以下是名字的交换
LEADI,BUFFER2
REPMOVSB
MOVAX,0
MOVCX,15
LEADI,NAME1[BX]
REPSTOSB;---------------------将空间复位置零,毕竟名字输入有长短不一
MOVCX,15
LEADI,NAME1[BX]
LEASI,NAME1[BX+15]
REPMOVSB
MOVCX,15
LEADI,NAME1[BX+15]
REPSTOSB
MOVCX,15
LEADI,NAME1[BX+15]
LEASI,BUFFER2
REPMOVSB
MOVCX,15
LEADI,BUFFER2
REPSTOSB
POPCX
POPSI
INCSI
LOOPSECOND
POPCX
DECCX
CMPCX,0
JNEFIRST;-----------------没办法,语句太长,总是差1byte,已经没有可以
;再简化了...只好出此下策...呵呵
RET
RANK_GRADEENDP
;==========================================
;==========================================
PRINT_OUT_RANKPROCNEAR
PRINT_ENTERING
PRINT_ENTERING
LEADX,NUMBER_PROMPT_2
MOVAH,09H
INT21H
THREE_SPACE
MOVAH,09H
LEADX,NAME_PROMPT_2
INT21H
THREE_SPACE
THREE_SPACE
MOVAH,09H
LEADX,GRADE_PROMPT_2
INT21H
THREE_SPACE
MOVAH,09H
LEADX,RANK_PROMPT_2
INT21H;--标题栏---显示NUMBERNAMEGRADERANK
MOVCX,5
MOVSI,4
PRINT_NUMBER:
PRINT_ENTERING
THREE_SPACE
MOVAH,02H
MOVDL,NUMBER[SI]
ADDDL,30H
INT21H
THREE_SPACE
THREE_SPACE
MOVAH,02H
MOVDL,20H
INT21H
MOVAX,SI
MOVBL,15
MULBL
MOVBX,AX
MOVAH,09H
LEADX,NAME1[BX]
INT21H
MOVAL,GRADE[SI]
XORAH,AH
MOVBL,10
DIVBL
MOVBL,AL
MOVBH,AH
MOVDL,BL
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,BH
ADDDL,30H
MOVAH,02H
INT21H
THREE_SPACE
THREE_SPACE
MOVAH,02H
MOVDL,20H
INT21H
MOVDL,RANK[SI]
ADDDL,30H
INT21H
DECSI
DECCX
CMPCX,0
JNEPRINT_NUMBER;-----------又超过了...什么情况?
求解释...
RET
PRINT_OUT_RANKENDP
;===================================