资源描述
课 程 设 计 报 告课程名称 汇编语言程序设计 课题名称 中断应用程序设计 专 业 计算机科学与技术 2010年 9 月 5 日一、设计内容与设计要求1设计内容:通过本周的课程设计,学生能够巩固所学的基础知识,并能够使学生更加熟练运用汇编程序设计语言来掌握综合汇编程序设计的方法和过程,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。1、编制一计算比赛成绩的程序,要求完成以下功能: (1) 9名评委,每个评委给分范围为010(整数); (2) 9名评委给分中,去掉一个最高分和一个最低分,剩余7名评委的平均分即为参赛者的得分(精确到小数点二位); (3) 将得分在光标位置处显示出来。2、编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30字的grade数组中,各数据的格式为:学号,成绩1,成绩2,成绩5然后根据grade中的学生成绩,把学生名次填入rank数据组中,并显示出来,格式为:学号,名次3、利用INT 1CH(大约每秒中断18.2次)编写一个中断驻留程序,要求在屏幕的右上角显示计算机中当前系统时间,显示格式为时:分:秒:1/100秒4、输入一个菱形的两条对角线长,在屏幕上用*号画出一个彩色的菱形。5、设置图形方式并显示彩条,要求: 选择背景色为蓝色,调色板为0,然后每行显示一种颜色,每四行重复一次,一直到整个屏幕都显示出彩条2设计要求:掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。1. 设计正确,方案合理。2. 界面友好,使用方便。3. 程序精炼,结构清晰。4. 设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。5. 上机演示。6. 按学号顺序选课题号,并在规定的时间内独自完成相关课题的汇编源程序编写、调整和运行。源程序及编译生成各文件均保存在软盘中;7. 按本任务书的要求,按附录的要求编写课程设计报告(Word文档格式)。并用A4的复印纸打印并装订; 二、进度安排第 1 周 上机时间 星期1 布置任务 星期2 8:0012:00 星期3 8:0012:00 星期4 8:0012:00 附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含程序原代码)。目 录一、课程的主要功能1二、功能模块的划分2三、主要功能的实现四、程序调试五、总结六、附件1、课程的主要功能1、课题的主要功能: 班级学生成绩处理主要要求我们从键盘输入一个班的成绩,包括学生的学号,学生的各科成绩(总共五科),将输入的学生信息存放在数组grade中,然后用编写的程序来实现计算和显示学生学号和名次的功能,为了实现该项功能,将通过计算每个学生的平均成绩,并将其进行排序来实现。结果保存在rank数组中。使用者可以根据具体的菜单选项进行操作。例外,为了使程序大的功能较为完整点,为了让使用更好的使用该程序,我在原来的要求上增加了几个功能模块,如查询、删除和退出功能。2、功能模块的划分1、模块图整个程序有5个功能模块构成,分别是输入信息模块、显示信息模块、查询信息模块、删除信息模块和退出菜单模块,他们之间的关系如下模块图所示:开始 选择功能 I L S D Q删除信息显示信息录入信息查询信息学号、名次退出程序结束2、程序模块分析:此程序主要分为大模块,包括主模块,输入模块和输出模块1.主模块:从键盘输入学生的学号、分数,并在屏幕上显示学生的学号和名次,其功能是根据输入的学生分数,计算并显示学生名次。此处采用冒泡排序法,并且一个学生的名次等于分数高于该生的学生人数加1。2输入模块:以学号为序从键盘输入学生分数,各个分数之间用逗号隔开,最后用回车符结束。再把学生成绩存入grade数组。其功能是接收学生的分数,并将从键盘输入的十进制数转换为二进制。3输出模块:从RANK数组取得学生名次,把学生名次以学号为序在屏幕上显示,其功能是显示学生的名次。4.查询模块: 此模块是根据输入的查询方式对存在文档里的信息进行查询,可以按学号查询或按成绩查询,并在屏幕上显示查询的信息。5.删除模块:删除模块是在查询模块的基础上对查询的内容进行删除。3、主要功能的实现一、功能模块的分析 此次班级成绩处理程序使用了5个功能模块,分别是输入信息模块、显示信息模块、查询信息模块、删除信息模块和退出菜单模块,使用者只需要根据界面的菜单提示选择进行相应的功能模块就可以了。 部分功能模块如下:1.菜单功能源代码:INPUT: MOV AH,0 INT 16H CMP AH,26H ;IS L? JNZ NEXT1 CALL LIST JMP MAINLOOPNEXT1: CMP AH,17H ;IS I? JNZ NEXT2 CALL INSERT JMP MAINLOOPNEXT2: CMP AH,1FH ;IS S? JNZ NEXT3 MOV STATE,S CALL SEARCH JMP MAINLOOPNEXT3: CMP AH,20H ;IS D? JNZ NEXT4 MOV STATE,D CALL SEARCH JMP MAINLOOPNEXT4: CMP AH,10H ;IS Q? JNZ INPUT RET此功能根据提示选择相应的选项进行操作,“S”为查询功能,“I”为输入功能,“D”为删除功能,“L”为显示功能,“Q”则退出选项。2、输入功能模块部分代码 GETSTR MACRO ADDR LOCAL EXT,CHAR,SPACE MOV BX,0SPACE: MOV &ADDR&BX,0 INC BX CMP BX,10 JL SPACE MOV BX,0CHAR: MOV AH,1 INT 21H CMP AL,13 JZ EXT CMP AL,10 JZ EXT CMP BX,9 JG CHAR MOV &ADDR&BX,AL INC BX JMP CHAR EXT:ENDM 此输入信息模块用数组来接受学生信息,并且限制了信息的长度,在程序中可连续调用该模块来满足用户连续输入学生信息的要求,并将其信息存入到了grade数组中。3、删除模块和查询模块有着大部分相同的代码,删除模块就包含了查询模块,它首先就必须根据输入的学生信息在文件数组里对信息进行查询后才能进行删除的操作,其部分代码为:CMPLOOP: MOV AH,14H LEA DX,MYFCB INT 21H CMP AL,01 JNZ NEXT JMP EXITSNEXT: CLD MOV AL,10 MUL WAY LEA SI,VALUE LEA DI,N ADD DI,AX MOV CX,10 REPE CMPSB JNZ CMPLOOP SHOW PRINT MOV FLAG,1 MOV CL,RECID CMP STATE,D JNE RETURNDEL: MOV AH,14H LEA DX,MYFCB INT 21H CMP AL,0 JNZ W_END SUB RECID,2 MOV AH,15H LEA DX,MYFCB INT 21H INC RECID JMP DELW_END: CLD LEA DI,MYDTA MOV CX,50 MOV AL,0 REP STOSB SUB RECID,1 MOV AH,15H MOV MYDTA,1AH LEA DX,MYFCB INT 21H SHOW DELOKRETURN: MOV RECID,CL JMP CMPLOOPEXITS: CALL CLOSEF CMP FLAG,0 JNZ EXT SHOW NOTHISEXT: MOV FLAG,0 POP DX POP CX POP BX POP AX RETSEARCH ENDP查询或删除功能可以根据学生的学号或各科成绩来进行查询或删除,如果输入有误将提示:error,无误的话就可以直接输入信息进行查询和删除的操作。二、流程图举例:查询功能模块流程图开始选择功能选项 S Q选择查询方式按序号查询按科目成绩查询显示查询信息结束4、程序调试1首先调试的时候,总是不能显示之前所输入的学生信息数据,每次都必须重新输入,通过请教老师同学得到了解决,在程序里使用了文件的管理,将每次的输入都增添在了文档里,每次输入、删除后的信息都保存在该文件中。程序也用了“来建立学生信息的磁盘卷标,使程序更加完善。2这个程序要求写入信息并排学生名次,计算学生平均分倒是很简单,要是单独将平均分排序也不太难,问题是我不知道将其综合,名次老和学生学号对不上号,不过在老师的帮助下也得到了解决。3.程序算法解决完了就是要注意一些较为基础的问题,在定义变量的时候不能用特殊的名称,否则会造成那很多错误,造成不必要的时间浪费。4我的程序菜单较为简单,调试时输入功能界面如下: 查询或删除功能的界面如下:如图一所示,为输入错误的信息导致界面显示ERROR,图二则是正常的情况下运行的界面。 图一 图二5、总结此次汇编课程设计是在开学的第一周,虽说是已经开学了,但是学习状态可以说还是零。当接到任务书时我的心里有说不出的高兴,班级学生成绩处理,这个课题对我来说再熟悉不过了,从大一的C课程设计到C+面对对象的课程设计,我一直做着与学生成绩相关的题目,虽然还没从假期的松散状态缓过来,但是一点也不怕,感觉自己能轻松完成这熟悉的课设,但是事实却让我不敢想象。班级成绩处理程序设计要求从键盘输入学生的基本信息,如学生的学号、各科的成绩,然后将信息存入grade数组中,并要求处理数据将相应的学生学号和名次存放在rank数组中,并随时可以根据使用者的意思显示出来。面对看上去这么简单的题目,我竟一开始写代码就不知道该怎么动笔。我想首先用数组来存放学生的成绩,并通过编简单的程序计算每学生的平均,可却不知道该怎么将学生的学号和平均成绩捆绑在一起来进行排序。想到方法又卡住了,就这样想了很久也没能解决问题。要做好一个简单的程序首先就是要将思路想好,然后才能动笔编个好多程序,但是一开始我就没一个完整的思路,想到这我是越来越失去信心了。不过在老师的精心辅导下,我还是努力完成了任务,没有放弃。“汇编语言程序设计”是计算机专业的重要专业基础课,是从事计算机研究与应用的基础,是计算机专业必修的核心课程之一,为更好的培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力,对这门课开设了课程设计。汇编语言程序设计是一门实践性很强的课,能很好的培养学生的创造性和动手能力,所以课程设计也是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,汇编语言已经成为当今计算机应用中空前活跃的领域,是很多技术的基础在生活中可以说得是无处不在。所以认真做好这次课程设计对我们来说很重要,从中我也是收益很多。也有很多感受。首先,通过这次汇编语言程序设计,让我更深地体会到了上机操作有助于将书本上的知识系统化、现实化,更加锻炼了我自己的查漏补缺的能力。书本上的知识永远是死的,只有将其运用到实际的生活中才会变成活的,而课设恰好给了我们这样一个机会。其次,课程设计是一个综合性的课程,不仅能检测我们的学习这门课的熟练程度,还能让我们温习课程,达到复习和巩固的效果,在课程设计的过程中我们不断地遇到问题,不断的在图书馆和网上、书本上查找资料,不断的向老师、同学请教问题,所以慢慢的解决问题,而这就是一个不断提升自己的过程。课程设计也教会了我们怎么样利用自己身边有的资源,如书本、网络、老师和同学,怎样和同学互相学习、互相帮助、互相合作。总之,此次课程设计算是个较为完整的程序,将学到过的知识如中段程序、输入输出程序,DOS功能的调用,指令系统等综合起来,让我的知识更加系统化,只是还是存在些问题,相信有了这次课程设计,我的学习兴趣更大,一定会在今后的学习和生活中同样做到查漏补缺,争取做到更好。6、附件源程序清单:DATA SEGMENT MYFCB LABEL BYTE ; files FCB FDRIVER DB 0 FNAME DB STUDENTS FEXT DB MAO FBLOCK DW 0 RECSIZE DW 50 FSIZE DW 2 DUP(?) FDATE DW ? FPATH DB 10 DUP(?) RECID DB 0 RECBK DW 2 DUP(?) SEL DB List Insert Search Delete quit $ PROMPT DB 13,10, Num s1 s2 s3 s4 s5 $ NUM DB 13,10, 1. NUM :$ sb1 DB 13,10, 2. s1 :$ sb2 DB 13,10, 3. s2 :$ sb3 DB 13,10, 4. s2 :$ sb4 DB 13,10, 5. s3 :$ sb5 DB 13,10, 6. s3 :$ ERRMSG DB 13,10, * ERROR ! *$ WHICH DB 13,10,SELECT A WAY(1-5) :$ STRING DB 13,10,INPUT THE VALUE :$ NOTHIS DB 13,10,NO THIS STUDENT !$ DELOK DB 13,10,THE RECORD DELET SUCCESS !$ FLAG DB 0 WAY DB ? STATE DB ? VALUE DB 10 DUP( ) PRINT DB 13,10 MYDTA LABEL BYTE N DB 10 DUP( ) s1 DB 10 DUP( ) s2 DB 10 DUP( ) s3 DB 10 DUP( ) s4 DB 10 DUP( ) s5 DB 10 DUP( ) DB $DATA ENDSSHOW MACRO ADDR MOV AH,9 LEA DX,ADDR INT 21HENDMGETSTR MACRO ADDR LOCAL EXT,CHAR,SPACE MOV BX,0SPACE: MOV &ADDR&BX,0 INC BX CMP BX,10 JL SPACE;小于10就转移,即BX连续自增(限制数组中一个元素的长度) MOV BX,0CHAR: MOV AH,1 INT 21H;输入的一个字符放到AL中 CMP AL,13 JZ EXT CMP AL,10 JZ EXT;输入回车键和空格键的话就退出输入 CMP BX,9 JG CHAR;大于9再次输入 MOV &ADDR&BX,AL;将输入的数据放在ADDR数组中 INC BX JMP CHAR ;最长输入10个元素EXT:ENDMCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATAMAIN PROC FAR PUSH DS;将DS进栈 SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX MOV AH,1AH LEA DX,MYDTA INT 21H JMP INIT; MAINLOOP: MOV AH,1 INT 21H;输入一个字符保存在AL中 CMP AL, JNE MAINLOOP;AL不为空格键就转移再次输入,即输入空格键就结束了INIT: MOV AH,6 ;屏幕初始化 MOV AL,0 MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 MOV BH,7 INT 10H MOV AH,2;置光标位置 MOV DH,1 MOV DL,1 MOV BH,0 INT 10H SHOW SEL ;显示目录INPUT: MOV AH,0 INT 16H ;建文件 CMP AH,26H ;是L? JNZ NEXT1 CALL LIST JMP MAINLOOPNEXT1: CMP AH,17H ; 是I? JNZ NEXT2 CALL INSERT JMP MAINLOOPNEXT2: CMP AH,1FH ; 是S? JNZ NEXT3 MOV STATE,S CALL SEARCH JMP MAINLOOPNEXT3: CMP AH,20H ; 是D? JNZ NEXT4 MOV STATE,D CALL SEARCH JMP MAINLOOPNEXT4: CMP AH,10H ; 是Q? JNZ INPUT RETMAIN ENDPLIST PROC NEAR ;列出学生信息 CALL OPENF MOV RECID,0 CMP FLAG,0 JZ CONTINUE RETCONTINUE: SHOW PROMPTLISTLOOP: MOV AH,14H LEA DX,MYFCB INT 21H CMP AL,01 JNE N1 JMP FINISHN1: CMP AL,0 JE N2 JMP FINISHN2: SHOW PRINT JMP LISTLOOPFINISH: CALL CLOSEF RETLIST ENDPINSERT PROC NEAR ;插入学生的信息 MOV RECID,0 CMP FLAG,0 JZ READL RETREADL: MOV AH,14H LEA DX,MYFCB INT 21H CMP AL,01 JE WRITES CMP AL,0 JE READLWRITES: SHOW NUM ;插入学生信息 GETSTR N SHOW sb1 GETSTR s1 SHOW sb2 GETSTR s2 SHOW sb3 GETSTR s3 SHOW sb4 GETSTR s4 SHOW sb5 GETSTR s5 MOV AH,15H ;写入文件 LEA DX,MYFCB INT 21H CALL CLOSEF RETINSERT ENDPSEARCH PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX CALL OPENF MOV RECID,0 CMP FLAG,0 JZ START RETSTART: SHOW NUM SHOW sb1 SHOW Sb2 SHOW sb3 SHOW sb4 SHOW sb5 SHOW WHICHINWAY: MOV AH,1 ;根据查找选项查询学生信息 INT 21H CMP AL,1 JL INWAY CMP AL,5 JG INWAY SUB AL,31H MOV WAY,AL SHOW STRING GETSTR VALUE SHOW PROMPTCMPLOOP: MOV AH,14H LEA DX,MYFCB INT 21H CMP AL,01 JNZ NEXT JMP EXITSNEXT: CLD MOV AL,10 MUL WAY LEA SI,VALUE LEA DI,N ADD DI,AX MOV CX,10 REPE CMPSB JNZ CMPLOOP SHOW PRINT MOV FLAG,1 MOV CL,RECID CMP STATE,D JNE RETURNDEL: MOV AH,14H ; 将查询到的信息删除 LEA DX,MYFCB INT 21H CMP AL,0 JNZ W_END SUB RECID,2 MOV AH,15H LEA DX,MYFCB INT 21H INC RECID JMP DELW_END: CLD LEA DI,MYDTA MOV CX,50 MOV AL,0 REP STOSB SUB RECID,1 MOV AH,15H MOV MYDTA,1AH LEA DX,MYFCB INT 21H SHOW DELOKRETURN: MOV RECID,CL JMP CMPLOOPEXITS: CALL CLOSEF CMP FLAG,0 JNZ EXT SHOW NOTHISEXT: MOV FLAG,0 POP DX POP CX POP BX POP AX RETSEARCH ENDPOPENF PROC NEAR ;打开或建立文件 MOV AH,0FH LEA DX,MYFCB INT 21H OR AL,AL JNZ CREATE RETCREATE: MOV AH,16H LEA DX,MYFCB INT 21H OR AL,AL JNZ SETFLAG RETSETFLAG: MOV FLAG,1 SHOW ERRMSG RETOPENF ENDPCLOSEF PROC NEAR MOV AH,10H LEA DX,MYFCB INT 21H RETCLOSEF ENDPCODE ENDS END MAIN计算机科学与技术系课程设计评分表课程名称: 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: (注:1此页附在课程设计报告之后;2综合成绩按优、良、中、及格和不及格五级评定。)
展开阅读全文