汇编课程设计成绩管理系统源代码

上传人:痛*** 文档编号:131941147 上传时间:2022-08-07 格式:DOC 页数:27 大小:123.50KB
收藏 版权申诉 举报 下载
汇编课程设计成绩管理系统源代码_第1页
第1页 / 共27页
汇编课程设计成绩管理系统源代码_第2页
第2页 / 共27页
汇编课程设计成绩管理系统源代码_第3页
第3页 / 共27页
资源描述:

《汇编课程设计成绩管理系统源代码》由会员分享,可在线阅读,更多相关《汇编课程设计成绩管理系统源代码(27页珍藏版)》请在装配图网上搜索。

1、精品文档,仅供学习与交流,如有侵权请联系网站删除XXXXX课程设计说明书汇编语言课程设计班级: 网络B101 姓名: XXX 学号 XXX 设计题目: 学生成绩管理 设计时间: 2012.12.09 至 2012.12.21 指导教师: XXX 评 语:_评阅成绩:_评阅教师:_一、 课程设计的目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。二、 设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 20

2、10三、课程设计要求 1要求编写并调试通过一个小型软件,实现对软件或硬件的操作。2遵循模块化、结构化的程序设计方法。3.要求程序必须正确。4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。5.要求程序结构合理,语句使用得当。6.适当追求编程技巧和程序运行效率。四、课程设计的课题和分析题目:学生成绩管理分析: 建立学生成绩文档;输入学生各门功课成绩;(假设3门功课);修改指定学号的学生成绩;统计指定学号的学生的平均成绩、总成绩,并在屏幕上显示; 统计指定学号课程的平均成绩,并在屏幕上显示; 每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数;(分数段为:=90;8089;707

3、9;6069;=59)此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。对学生成绩记录进行检索(按学号、姓名), 成绩排序(按总成绩降序排列), 退出,最好用到文件处理。五、流程图、总体设计、详细设计 学生成绩管理,最基本能实现的的功能是输入学号,同时显示该学生的基本的信息,我设计的成绩管理系统功能还包括了显示该生的语文,英语,数学三门学科的成绩,求出了该生的总分,以及该生的平均分,动态输入学生的成绩,而且成绩是按照三位数显示的,可以输入任意多的学生人数,每个学生都是三门课程,最后统计输入所有学生的各科各个分数段的人数,最后显示出所有学生的成绩排名情况。为了使系统更实际一些,我设计的系统

4、包括建立了文件,方便学生的信息一次录入之后可以保存该数据,将该数据保存在score.txt文件中,而且文件的路径与该软件默认的安装路径一致;为了使系统更方便用户使用,我设计了菜单,菜单中设计了六个功能,包括插入,删除,查询,修改,查看,退出等。以下是对程序中常用的六个个功能进行解析:1、 数据输入功能:这是必不缺少的功能,学号的输入,成绩的输入都离不了这个功能,在输入成绩时,特地加了一个判断功能,在输入不合理的成绩时,程序将提示出错,并要求重新输入。在输入学生学号的时候,程序首先会判断此学生的成绩是否存在,如果存在,则程序提示需重新输入。插入一条学生记录子模块,搜索可用单元,接收输入的记录,并

5、写入文件。建立成绩表子模块,控制输入界面,并多次调用插入记录子模块,完成成绩的建立。2、 修改功能:考虑到会存在在输入成绩时,容易输入错误,或者发生个别学生的试卷被误判需修改成绩等情况,所以加了此功能,在发生以上情况时可以调用此功能,修改指定学生的成绩。3、 删除学生信息的功能。如果输入的学生信息根本不存在,或者发生其它情况需删除一个无意义的学生信息时,可以调用此功能。此功能将实现将指定学号学生的信息删除。4、 信息查找功能:当需要查询某个学生的成绩或者检查输入是否有误时,可以调用此功能,此功能实现将指定学号学生的成绩显示出来。实际上在调用此功能的同时,程序会首先求的总成绩,平均成绩,然后产生

6、排名结果,最后将数据信息显示。5、显示排名信息功能:此功能会将学生成绩自动相加,得到每位学生的总成绩及平均成绩,然后进行排名,得到每个学生的名词,最后按照输入顺序将所有学生的学号,语文成绩,英语成绩,数学成绩,平均成绩,总成绩,名次依次输出。模块中排名处理、学科平均成绩计算、均需取出某一学科的所有学生成绩,因而此操作作为公用子程序以供调用。个人总分及平均分处理较为简单,根据索引逐条处理记录。排名处理。排名结果为一维数组,与学科成绩存在对应关系。查询学生记录,先进行学号匹配,再输出一条记录;查询该生的所有信息。6、 文件写入及退出功能。此功能实现将学生的信息保存在一个文件里。此程序默认将文件放在

7、C盘下,名称为:score,属性为txt格式的文本文档。该文档能够保存数据,以便数据不需要重复录入,是系统更能满足用户需求。写入文件完毕后,关闭文件,并退出程序。该程序的流程图:文件创建和菜单显示:在创建文件时使用命令请求创建文件,以下是菜单显示,首先显示菜单的界面,1号功能接收功能,程序先和菜单中所有的功能都进行比较,假如都不是功能菜单,则提示输入错误,重新输入,假如输入正确,则调用相对应的子程序。创建新文件mov ah,3eh设置属性设置路径保存文件菜单的显示选择系统功能插入调用insertY修改N调用modifyY删除N调用deleteY调用show排名分段调用countNNNagain

8、Y创建成功ESC调用escYYY文件内容显示:在文件查找的子程序会显示该生的学号,三门的成绩,该生的总分,平均分和该生成绩的排名情况,则在显示学生信息之前先处理数据,成绩和总分是按照三位数的处理,学号和名次是按照两位数处理的,总分是字类型,其他的是字节类型,所以必须要转换基址才能找到该生相对应的总分。文件的删除则是先找到该学生的信息,然后显示该生的成绩缓存区的地址的下一位,则显示的是空白。 调用总分子程序调用平均分子程序学号存在开始N输出三门成绩以si和n的比较输出学生信息按三位处理Y输出平均分需要扩展si指针依次下移2输出总分输出名次结束 调用二位学号输入的子程序学号存在开始N地址相减YAd

9、d si,1删除完成显示内容为空循环删除之后内容n减1结束为0为零则retYN总分和名次定义子程序sum proc near,先是从存放各科的缓存区移出数据,然后相加,采用循环,对用户输入的数据都是按照这个规则求出该生的总分;ping proc near是求出该生的平均分,把之前存放在zcbx的总分数据取出来,然后除以3;存储器清零cx,si循环开始开始NMov Mcsi,1名次初值是1Yjge continue总分进行比较Zcbx与Zcdiadd mcsi,1把学生个数给bx结束大于或者等于mov dx,zcdiYN名次为字节则si+1Si 与ax比较为0YN六、遇到的问题及解决办法问题:在

10、编写程序时,不知道删除的程序应该如何实现,以及在创建文件时不知道如何下手,然后老师提示是采用中断,我们需要自学中断,在设置光标和屏幕显示也是采用中断,我自能自学课本的第九章内容,然后再写程序,在文件的删除那里我卡住了研究好久也不知道怎么实现,最后我问了我同学,我们一起讨论出的结果就是让屏幕不显示当前指针指向的内容,显示指针指向的一个内容即可,这样就可以实现删除功能,删除功能就是删除该学号学生的成绩数据,使这些数据全部清空则达到了删除文件的功能;关键代码:此段代码时是实现数据段插入功能首先提示输入学号的语句,然后调用shuru的宏定义,这个宏定义是接收键盘输入的两位数,然后处理成十进制输出,比较

11、符合实际,然后把n学生个数给bl,将输入的学生学号保存在xhbx数组中,方便使用,然后判断该学号是否为第一次输入,是则跳转,假如不是第一次输入,则提示用户该学号已经存在,需要重新输入,跳转到输入成绩的子程序,在调用shuruu宏,此功能是处理三位数,使成绩是按照三位数显示的,而且必须是在合理的范围内的,假如输入的数据是不合理的则又跳转到重新输入的界面,要求用户输入有效数据,数据输入完成之后则存入相对应的缓存区。input proc near ;输入学生学号,成绩e6: output mess1 shuru mov bl,n ;统计输入学生个数 mov bh,0 mov xhbx,dl ;输入的

12、个数同时以地址指针形式显示 cmp bx,0 ;判断是不是第一次输入,如果是,则跳过比较程序 je qq1 ;继续输入成绩 mov cl,n ;如果不是第一次输入则要将输入的学号与以前输入的比较 cbw mov si,0 mov al,xhbxe7: cmp al,xhsi je e5 add si,1 loop e7 jmp qq1e5: output ts4 jmp e6 qq1:output mess2 ;如果不是重复的学号则可以继续输入成绩和其他信息 output mess4 mov si,0 mov cx,3qq3:shuruu cmp dx,78h ;比较输入的成绩是否大于120,

13、如果大于120的话,那么重新输入成绩 jbe qq2 output ts3 ;提示输入错误 jmp qq1qq2:mov bufsi,dl ;把输入的学生信息保存在缓存区 output bg add si,1loop qq3 mov bl,n cbw mov al,buf0 ;以下是把之前的成绩数据保存到相对应的缓存区 mov chibx,al mov al,buf1 mov engbx,al mov al,buf2 mov matbx,al retinput endp该关键代码是实现该学号学生的总分和名次的交换以及显示,首先是先把即将要用到的存储器全部清零,将名次mcsi初值为1,si依次+

14、1,因为存放名次的数组是字节类型的,然后把n学生的个数赋给cl,接下来就是处理查找总分的地址指针,因为总分数组是字型所以需要使bl*2,然后cx清零,按照学号找到相对应该生的总分,两个总分相比较此时大的则暂时为第一名,然后再继续接受总分,接受的总分又要和之前暂时的第一比较然后和暂时的第二名比较,循环找出第一名,继续循环,显示总分和名次。rank proc near ;排名 mov cl,n mov ch,0 ;将用到的存储器清零 mov si,0rrc:mov mcsi,1 ;将存储名次的存储器给予的初值是1 add si,1 ; loop rrc mov al,n ;此处2n最后放到al中,

15、是为了下面总分的输出 mov bl,2 mul bl mov cl,n mov ch,0 mov si,0 mov bx,0 mov di,0rrb: mov dx,zcdirra: cmp dx,zcbx ;总分之间的比较 jge continue ;大于等于的那个分数则为第一名 add mcsi,1 continue: add bx,2 loop rra ;余下的继续比较依次排出名次 mov cl,n cbw add si,1 ;名次是字节类型的 add di,2 ;总分是字类型的 mov bx,0 cmp si,ax ;ax里面是2n为了找到总分输出 jbe rrb ret rank e

16、ndp七、结果显示菜单显示界面图:首次输入学生信息界面;修改学生信息界面;查看学生各个分数段的界面;删除学生信息界面:查看学生成绩排名情况界面:八、感想、收获及体会 终于完成了一门课程设计,比起之前完成的综合实验我觉得自己又上升了一个台阶,学到的东西更多了,虽然自己付出了两周的时间,但是一个好的程序员就需要舍得花时间去创建更加完美的程序,完成更多的功能,满足用户更多的要求。这次的课程设计和自己上课学到的东西有很多不同,需要自己去查看中断的代码,因为此次课程设计老师要求我们必须有文件的创建和文件存储和文件关闭,给课程设计增加了难度,课设正是这样,所以在完成这门课设之后,我真心觉得自己的编程水平又

17、上升,同时也说明了好多东西是可以靠自己领悟和自学得来的;课程设计完成了,但是我设计的成绩管理系统还是存在不足:成绩都是用整数表示的,没有实现浮点运算;平均成绩也是按照整型的,查询功能中只能通过学号查询,没有实现学号或者通过姓名查询的选择;主菜单界面设计不够人性化,不够简单明了,缺少美观,没有使用彩色的界面。虽然我的程序中出现那么多的不完美,但是只有我有一颗追求完美的心,则我就会有一个继续学下去的心。此次的课程设计,我还是和以前的综合实验的感触有些类似,在此之前,大多数时候都在用高级语言编写程序,已经习惯了高级语言的方便灵活的语法形式。一下子突然转为用汇编语言进行程序设计,总是要经过一个很不习惯

18、的适应过程。但是我们学习编语言,可以让我们更好地理解程序设计的本质和原理。对以后的学习和工作都带好很多好处。这次在编写和调式汇编程序过程中体会最深的就是,没有好的工具,汇编程序的调式工作太困难了!这次使用的是微软的masm5.0编译工具,是DOS底下的编译工具,但是没有其它可视化的调式工具,只能利用DOS底下的debug命令进行调式。程序稍微长一点的时候,调试起来就不是那么方便了,主要问题是在debug中虽然可以反汇编,但是反汇编后的源程序与自己写的不太一样了(符号常量和标号都变成了数字地址),不方便辨认当前调式程序对应于源代码中的哪一行。这些疑问都是我完成课设的难点,自己学的不是很透彻,在完

19、成报告之前,我花了一天的时间和同学讨论我的程序,通过对这学生成绩管理的的设计,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅资料也学到了一些课本上没有的东西,有幸接触到中断这个功能,同时更是让我明白了即使是低级的汇编语言也可以完成高级语言可以完成的程序,历时两周终于完成, 这次课程设计中有很多源程序的子程序的源代码可以从资料中或获得,但有很多都需要我们仔细琢磨才能明白其中的原理,同时程序中需要调用大量的BIOS和DOS系统功能调用,如显示字符串的功能调用、光标设置的功能的调用、清屏的功能调用等,这些问题

20、如不查询资料就无法理解,因为上汇编语言基础时对这些DOS和BIOS的系统功能了解很少,所以我们需要查询DOS和BIOS功能的系统调用的基本信息。还有在一些循环结构设计上也有许多不能理解的地方,都需要加以深刻的理解才能将问题顺利的解决,多整个程序的理解也有了更进一步的了解。有时候遇到自己查资料和不能理解的地方时,自己不能解决时,先找同学讨论一下,会有意想不到的收获,有些问题就会迎刃而解。即使是花了两个周的时间完成一个程序,但是我可以骄傲的告诉别人我完成一个程序了,完成了一个设计,将来我更有底气的告诉别人这个是我的成品,就如老师说的,我们可以骄傲的告诉面试老师我曾经完成的作品。目前已是大三的我们,

21、我们完成的课程设计已经很多了,但是我对此次的课设感慨真的很多,因为这次完成真的太不容易,因为我自己本人觉得我真的一点都学不会,居然也可以完成如此浩大的程序编写,真的是我想不到的,虽然此程序我参考了资料,咨询了同学,但是那些收获是我都很惊叹的,进一步的拓宽了我的汇编知识,同时最重要的一点是要学的精通可以靠自己自学,很多知识是我们自己就可以领悟的。虽然本程序仍然存在不少缺点和不足,但是只要我有心,只要我舍得花时间去自学,看看视频,一定能使我的编程能力提升,克服所以的不足,设计出更出色的作品。九 参考文献1郑晓薇编著,汇编语言机械工业出版2IBMPC汇编语言程序设计实验教程3IBMPC汇编语言程序设

22、计(第2版)十 附录。用户手册使用说明:可以根据我上面粘贴的运行界面进行使用,选择自己需要的功能源程序清单:huancun macro j,t ;将三位数的数据转换成为三个对应的字符,并将其存入缓冲区zs中j,t是两个哑元 push bx ;入栈是对存储器里面的值进行保护 mov si,t ;对两个哑元进行说明 mov ax,j mov bl,100 ;对输出的数据进行处理,显示出百位十位个位 div bl add al,30h mov zssi,al ;把处理好的百位进行缓存区 add si,1 mov al,ah cbw mov bl,10 ;对十位的处理 div bl add al,30

23、h add ah,30h mov zssi,al add si,1 mov zssi,ah ;对个位的处理, add si,1 ;对输入的数据反复处理,指针下移 pop bx ;存储器出栈endmclear MACRO ;清屏的宏定义 MOV AH,2 ;设置光标位置 MOV DH,0 ;行号 MOV DL,0 ;列号 INT 10H ;屏幕及光标控制int 10h MOV AH,6 ;屏幕开窗口 MOV AL,0 MOV BH,7 ;颜色属性是正常显示,黑底白字 MOV CH,0 ;左上角的行号 MOV CL,0 ;左上角的列号 MOV DH,24 ;右上角的行号 MOV DL,79 ;右上

24、角的列号 INT 10H ;调用10号功能,设置屏幕的坐标是(0,0)(24,79)ENDM kong macro ;回车换行的宏定义 mov ah,2 ;2号功能输出回车换行 mov dl,0ah int 21h mov ah,2 mov dl,0dh int 21hendmoutput macro p ;字符串输出 mov dx,offset pmov ah,9int 21hendmshuru macro ;二位数数据输入 mov ah,01 ;1号功能的输入,输入的值放在dl中int 21hsub al,30h ;对输入的数据先减掉30hcbw ;字节扩展成字类型mov bl,10 ;对

25、输入的数据进行乘以10mul bl mov dl,al ;把al中的乘积取出来,放在dl中 mov ah,01hint 21hsub al,30h ;处理完了要加上30h再用一号功能输出 add dl,alendm zhuane macro e,b ;将二位数转换成对应两个字符,并将其存入缓冲区zs push bx mov si,b ;以下是对两个哑元的说明 mov al,e cbw mov bl,10 ;对二位数据的处理就是先显示出十位然后显示出个位 div bl add ah,30h add al,30h mov zssi,al ;处理好的数据存放在zs存储区 add si,1 mov z

26、ssi,ah add si,1 ;指针再下移,继续处理下一个 pop bxendm zhuans macro f,s ; 将三位数成绩转换成为对应的三个字符,并存入缓冲区zs中 push bx mov si,s mov al,f cbw ;需要扩展,字节扩展成字 mov bl,100 div bl add al,30h mov zssi,al ;百位存放在存储区 add si,1 mov al,ah ;把余数取出来 cbw ;字节扩展成字 mov bl,10 div bl add al,30h ;把ah中的余数取出来再进行除以10,最后的余数还是存放在ah中,此次的商放在存储区zs中 add

27、ah,30h mov zssi,al add si,1 mov zssi,ah ;最后的余数在ah中,其实就是三位数的个位 add si,1 ;指针下移 pop bx endmshuzi macro r ;二位数据输出,以下是对数据输出的处理 mov al,r cbw mov bl,10 ;对数据的输出和输入一样也需要进行处理,以十进制显示出来 div bl mov bl,ah mov dl,al add dl, 30hmov ah,2 ;2号功能显示十位int 21h mov dl,bladd dl,30hmov ah,2 ;2号功能显示个位int 21hendmshuruu macro ;

28、三位数数据输入 shuru mov al,dl ;用1号功能的输入值存放在dl中,首先把dl中的值存放在al中 mov dl,10 mul dl mov dx,ax ;乘以10以后的值存放在ax中;需要取出放在dx中 mov ah,1 int 21h sub al,30h cbw ;加完30h再把字节扩展成字 add dx,axendmshuzii macro u ;三位数数据输出 mov ax,u mov bl,100 ;对百位的处理,把100赋给bl div bl mov bl,ah ;商在al中,余数在ah中 mov dl,al ;把商从al中取出来 add dl,30h ;在显示百位之

29、前加30h,再放到dl中 mov ah,2 ;2号功能显示 int 21h shuzi bl endm DATAS SEGMENTm dw 0 ;移动文件指针时,选择绝对移动方式,则m代表指针偏移量zs db 18 dup (?) ;缓冲区用来存放单个学生信息的字符pathnam db C:score.txt,00h ;建立目录项handle dw ? ;文件句柄buf db 3 dup(?) ;输入缓冲区zc dw 100 dup(?) ;存放总成绩的数组pj db 100 dup(?) ;存放平均成绩数组n db 0 ;存放输入的学生信息的个数gs0 db 5 dup (0) ;记录所查询

30、科目分数段的gs1 db 5 dup(0)gs2 db 5 dup(0) mc db 100 dup (1) ;存放学生的名次的数组 chi db 100 dup (?) ;存放学生成绩的数组 eng db 100 dup (?) mat db 100 dup (?) xh db 100 dup (?) ;存放学生学号的数组 cour0 db chinese,$;语文 cour1 db english,$;英语 cour2 db maths ,$;数学 ts db 13,10,You are successful,press anykey to continue!,13,10,$;以下是提示语

31、句 ts1 db 13,10,You are wrong , Try again!,13,10,$ ts3 db 13,10,The score you input is bigger than 127,input agian!,13,10,$ ts4 db 13,10,The school number you input is exist,please try again!,13,10,$ cai0 db * The Student Grade Management System *,0ah,0dh,$ cai00 db * made by wei qiao yuan *,0ah,0dh,

32、$ cai db * Insert a data ,13,10,$;菜单的格式 cai1 db * Modify a data ,13,10,$ cai2 db * Delete a data ,13,10,$ cai3 db * Find a data ,13,10,$ cai4 db * Show the rank ,13,10,$ cai6 db * Show the count ,13,10,$ cai5 db * Exit with the keyboard of ESC ,13,10,$ ts2 db Please choose the Function,13,10,$ mess

33、db 13,10,The data you input is not exist,input again,13,10,$ mess1 db 13,10,Please input the school number(2) ,13,10,$ mess2 db 13,10, Please input three scores(0-120),13,10,$ mess4 db chinese english maths ,13,10,$ mess3 db Thank you ,13,10,$ strr1 DB *score and rank*,13,10,$strr2 DB 13,10,number w

34、en eng math average sum rank ,13,10,$strr3 db 13,10,course =90 =80 =70 =60 60 ,13,10,$bg db ,$ DATAS ENDS STACKS SEGMENT STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov es,ax mov ah,3ch ;请求创建文件 mov cx,00 ;默认属性 lea dx,pathnam ;装入pathnam的地址 int 21h mov hand

35、le,ax ;保存文件句柄main: ; 主菜单显示 output cai0 output cai00 output cai output cai1 output cai2 output cai3 output cai4 output cai6 output cai5 output ts2 mov ah,1 ;输入字符,选择功能键 int 21h cmp al,i jne n1 call insert ;调用insert子程序,输入学生学号,成绩 jmp rkn1: cmp al,m jne n2 call modify ;调用modify子程序,修改指定学生的成绩 jmp rkn2: cmp

36、 al,d ;调用de子程序,删除制定学生的成绩 jne n3 call de jmp rkn3: cmp al,f ;调用find子程序,显示指定学生的成绩及名次 jne n4 call find jmp rkn4: cmp al,s ;调用show子程序,显示所有学生的各科成绩,平均成绩,总成绩及名次 jne n5 call show jmp rkn5: cmp al,c ;调用showw子程序,显示各科各分数段的学生数量 jne n6 call showw jmp rkn6: cmp al,1bh ;调用exit子程序,将数据保存到score.txt文件中,并退出程序 jne n7 ca

37、ll exitn7: clear ;清屏 output ts1 ;以上都不选择则说明出错 jmp main ;再次跳转到菜单rk: output ts mov ah,1 int 21h clear jmp mainexit proc near ;退出 mov cl,n ;写入文件的次数 cbw mov bx,0 mov di,0zh: push di ;保存di,cx,bx中的内容 push bx push cx mov si,0 ;对si进行赋初值 zhuane xhbx,si ;调用宏zhuane将两位数的学号转换为对应的二个字符,并存放到zs缓冲区中 zhuans chibx,si ;调

38、用宏zhuans将三位数的语文成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuans engbx,si ;调用宏zhuans将三位数的英语成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuans matbx,si ;调用宏zhuans将三位数的数学成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuans pjbx,si ;调用宏zhuans将三位数的平均成绩转换为对应的三个字符,并存放到zs缓冲区中 huancun zcdi,si ;调用宏zhuanss将三位数的总成绩成绩转换为对应的三个字符,并存放到zs缓冲区中 zhuane mcbx,si ;调用宏zhuane,将两位数的名

39、词,转换为对应的二个字符,并存放到zs缓冲区中 mov ah,42h ;移动读写指针 mov al,00 ;移动方式为绝对移动方式 mov bx,handle mov cx,00 mov dx,m ;指针偏移量 int 21h add m,20 mov ah,40h ;调用40h功能,请求写文件 mov bx,handle ;获取文件句柄 mov cx,19 ;写入长度为19个字节 lea dx,zs ;将缓冲区zs中的内容写入文件score.txt int 21h pop cx pop bx pop di add di,2 ;目的指针加2 add bx,1 sub cx,1 ;输入一个之后c

40、x统计的个数就依次减1 cmp cx,0 ;判断写入是否完毕 jg zh mov bx,handle ;写入完毕,关闭文件 mov ah,3eh int 21h clear output mess3 ;关闭文件之后就显示提示语句MOV AH,4CH ;退出程序 INT 21H retexit endp ;子程序结束sum proc near ;求学生的总成绩 mov cl,n ;对运用到的存取器进行清零 mov ch,0 mov si,0 mov bx,0sss:mov al,chisi ;将三科成绩相加,将总成绩传给数组zc mov ah,0 ;高位清零 mov dl,matsi ;存放数学

41、的数组 mov dh,0 add ax,dx ;数学和语文相加 mov dl,engsi mov dh,0 add ax,dx mov zcbx,ax ;最后把语文数学和英语的三门成绩总分存放在zc总分的缓存区 add bx,2 add si,1 loop sss ;运用循环对输入的三门成绩求总分 retsum endpping proc near ;求学生的平均成绩 mov cl,n ;n是统计输入学生信息的个数 cbw mov si,0 mov bx,0p_p: mov ax,zcbx ;将总成绩除以三,获取的数据传送给数组pj mov dl,3 div dl mov pjsi,al ;把

42、除以之后的商从al中总取出放入pj平均的存储区 add si,1 ;下标依次加1 add bx,2 ;基址加2 loop p_p retping endpmodify proc near ;修改学生学号,成绩md1:output mess1 ;提示语句 shuru mov bl,n ;把学生个数给bl mov bh,0 mov al,dl mov si,0md: cmp al,xhsi ;先查找输入的学生是否存在 je qq1_1 ;查到的话,就跳转到qq1_1输入修改的值,也就是重新输入 add si,1 cmp si,bx ;不存在的话则继续输入继续比较 jbe md output mes

43、s jmp md1 ;不相等继续输入学号qq1_1: mov di,si output mess2 ;输入学号 output mess4 ;输入成绩 mov si,0 mov cx,3 ;cx存放的的科目qq3_1:shuruu ;分别输入语文,英语,数学成绩,并将其放在缓冲区buf中 cmp dx,78h ;比较输入的成绩是否大于120,如果大于120的话,那么重新输入成绩 jbe qq2_1 output ts3 jmp qq1_1qq2_1:mov bufsi,dl output bg ;输出一段空格 add si,1loop qq3_1 mov al,buf0 ;将存入buf中的成绩,

44、分别赋值给存放对应科目的成绩的数组 mov chidi,al mov al,buf1 ;buf1放的是英语 mov engdi,al mov al,buf2 ;buf2放的是数学 mov matdi,al ret modify endpcountt proc near ;统计各科各个分数段学生的个数 mov cx,5 ;有五个成绩分数段 mov si,0zl: mov gs0si,0 ;存放语文科目各个分数段的缓存区 add si,1 loop zl mov cl,n mov ch,0 mov si,0c11:mov al,chisi ;取出存放在缓存区的数据和90进行比较 cmp al,90

45、 jl cc1 ;大于则跳转 add gs00,1 ;小于等于90则进行个数的累加 jmp cc8 ;继续循环一直比较完五个分数段cc1:cmp al,80 ;和80进行比较 jl cc2 add gs01,1 ;进行累加存放入缓存区 jmp cc8cc2:cmp al,70 ;和70进行比较 jl cc3 add gs02,1 jmp cc8cc3:cmp al,60 ;与60进行比较 jl cc4 add gs03,1 jmp cc8 cc4:add gs04,1 ;最后剩下的数据存放在gs04的缓存区cc8:add si,1 ;统计完一个数据则需要继续统计,则和那些分数段比较之后满座条件

46、的继续统计 loop c11 lea si,gs0 lea di,gs1 mov cx,5 cld ;清除方向标 rep movsb ;以字节传送 mov cx,5 mov si,0 cc9: mov gs0si,0 ;对存放分数段的缓存区清零 add si,1 ;地址指针加1 loop cc9 mov cl,n ;存储器先清零 mov ch,0 mov si,0 mov cl,n ;给存储器赋值 mov ch,0 mov si,0c111:mov al,engsi ;对英语成绩进行分段,统计各个分数段的个数 cmp al,90 ;和90比较 jl cc15 ;大于则跳转 add gs00,1

47、 ;小于等于则继续统计 jmp cc88 ;继续比较,继续存储cc15:cmp al,80 ;和80比较 jl cc22 add gs01,1 ;符合条件则存储在缓存区 jmp cc88cc22:cmp al,70 ;和70比较 jl cc33 add gs02,1 jmp cc88cc33:cmp al,60 ;和60进行比较 jl cc44 add gs03,1 jmp cc88cc44:add gs04,1 ;最后的数据存放在gs04cc88:add si,1 loop c111 ;符合各个分数段的继续进行比较,继续加到各个分数段 lea si,gs0 lea di,gs2 mov cx

48、,5 cld rep movsb mov cx,5 mov si,0ct: mov gs0si,0 ;以si的值来统计,和显示各个分数段的数量 add si,1 loop ct mov cl,n mov ch,0 mov si,0c13:mov al,matsi ;对数学这门成绩的统计和分段 cmp al,90 ;和90比较 jl cc1_2 add gs00,1 jmp cc8_2cc1_2:cmp al,80 ;和80比较 jl cc2_2 add gs01,1 jmp cc8_2cc2_2:cmp al,70 ;和70比较 jl cc3_2 add gs02,1 jmp cc8_2cc3

49、_2:cmp al,60 ;和60比较 jl cc4_2 add gs03,1 jmp cc8_2cc4_2:add gs04,1 ;60以下的cc8_2: add si,1 loop c13retcountt endp ;这个子程序结束find proc near ;查找学生成绩 call sum ;调用子程序 call pingbj1:output mess1 ;提示输入学号 shuru mov bl,n ;n是统计输入学生的个数 mov bh,0 mov al,dl ;把值从DL从移出放在AL中 mov si,0 ;si清零bj: cmp al,xhsi ;将输入的学号与输入的学号相比, je i ;存在的话,将此学生的成绩以及信息输出 add si,1 ;指针下移 cmp si,bx ;和 jbe bj output mess jmp bj1 i: output strr2 ;输出信息的提示语句 shuzi xhsi ;调用宏,则输出之前处理好的三位数的三门成绩 output bg ;输出空格

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!