您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 用汇编对学生-学号-成绩排序
华北科技学院综合性实验报告课程名称汇编语言实验学期XXXX至XXXX学年第X学期学生所在系部计算机学院网络工程系年级XXX专业班级网络XXX班学生姓名XXXX学号XXXXXXXXXXXXXXX任课教师李冬艳实验成绩计算机学院制华北科技学院综合性实验报告第1页《汇编语言》课程综合性实验报告开课实验室:基础实验室二日期:XXXXXXXX实验题目学生成绩排序一、实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序、子程序、宏指令编程方法,提高汇编语言程序设计能力的应用水平。二、设备与环境PC兼容机、Windows操作系统、汇编程序masmforwindows2012三、实验内容编制一程序,要求接收从键盘输入的一个班的学生的学号、姓名、成绩,对学生的成绩进行排序,最后把学号、姓名、学生成绩、名次显示出来。实验要求:1.必须画流程图。2.本程序涉及汇编语言的多重循环、子程序及宏,其中成绩输入、计算学生名次、显示学生名次都分别用子程序,也可用宏处理。3.要求用菜单选择。具体要求:输入序号1是数据录入并输出(包括姓名、学号、成绩);输入序号2是排序后的数据输出(包括姓名、学号、成绩、名次);输入序号3(选做)是可以按学号查找某学生,并输出其成绩,选择修改或不改成绩。注意:所有数据录入必须有合法性判断。四、实验结果及分析(一)、程序实现的功能。1.本程序较为简单录入成绩,成绩间用空格隔开。程序会根据程序录入的顺序自动安排学号并根据成绩由大到小进行排序,输出名次。2.程序自带报错功能,提示输入正确的数据,使数据录入有合法性判断。(二)、程序的分析:华北科技学院综合性实验报告第2页1、本程序中分别运用了宏,子程序、定义提示符等,来简化程序,让程序更容易的看清楚。①:宏定义的举例:DISPMACROSTRINGPUSHDXLEADX,STRINGMOVAH,09HINT21HPOPDXENDM②:子程序定义的举例:STOREPROCNEARPUSHBXMOV[DI],BH;(DI目的变址寄存器,用于存放目的缓冲区的偏移地址)INCDI;偏移地址自加一MOV[DI],BLINCDIPOPBXRETSTOREENDPNEXTPROCNEARPUSHCXPUSHBXPUSHCOUNTMOVCX,COUNTLEADI,BUFF;BUFF地址传送给DIP2:CMPCX,0;比较Cx与0JZDONE;结果为0则转移到DONEINCDI;DI自加一INCDI;DI自加一CMPBH,[DI]JABIGJBSMALLINCDICMPBL,[DI]JABIG2INCDIDECCXJMPP2SMALL:INCDIINCDIDECCX华北科技学院综合性实验报告第3页JMPP2BIG2:DECDIBIG:PUSHCXMOVBX,COUNTMOVCL,02HSHLBX,CL;逻辑左移,最高位数移入CF,最低位补0MOVAX,[BUFF+BX-4]MOV[BUFF+BX],AXMOVAX,[BUFF+BX-2]MOV[BUFF+BX+2],AXPOPCXDECCOUNT;人数总和自减一LOOPBIG;DECDIDECDIDONE:POPCOUNTPOPBXPOPCXRETNEXTENDP③:提示符定义的举例:IFERRORPROCNEAR;检测输入是否有错MOVDH,00HCMPAL,'0'JBERRORCMPAL,'9'JAERROR;CF=0且ZF=0转移JMPNO_ERRORERROR:DISPERRORMOVDH,01HNO_ERROR:RET;栈顶字单元出栈,其值赋值给IP寄存器,(IP地址指针寄存器)将栈顶字单元保存的便宜地址作为下一条指令的偏移地址IFERRORENDP2、程序的设计:流程图提示所有数据录入必须有合法性判断。键盘输入录入数据,根据录入数据满足以下要求,一是,必须是数字,二是,不能为0,小于9,这里是当一个数字为一个来处理的。华北科技学院综合性实验报告第4页宏定义:宏定义主要用于将字符串进栈这一重复的过程中。子程序IFERROR键盘输入=0?跳转到ERROR显示ERROR=9?跳转到NO_ERROR跳转到NO_ERROR跳转到ERROR显示ERROR结束程序否否是是子程序IFERROR键盘输入进栈跳转到NO_ERROR显示输入字符结束程序华北科技学院综合性实验报告第5页排序:子程序NEXT键盘输入CX,BX,COUNT进栈BUFF地址传送给DICOUNT赋值给CXDI自加2Count=0?是转到DONEBX=COUNT的值,CL=02HCOUNT逻辑左移02HAX=[BUFF+BX-4][BUFF+BX]=AXAX=[BUFF+BX-2][BUFF+BX+2]=AXCX出栈人数总和自减一LOOPBIG;DI自减2BH=[DI]?转到BIG转到SAMLLDI自加2CX自减1转到P2CX进栈DI自加1BH=[DI]?转到BIG2DI自加1DI自加1转到P2高于低于等于华北科技学院综合性实验报告第6页华北科技学院综合性实验报告第7页三、实验心得体会:本学期开设了汇编语言这门课程。在课程的最后,我们迎来了汇编大实验。在本学期的学习和做综合实验的过程中。这学期通过学习汇编程序设计,是我认识到它是计算机语言里的第一个语言。它有优点也有缺点,优点是它实际上是你计算机处理器实际运行的指令的命令形式表示法。这意味着你将与处理器的底层打交道,比如寄存器和堆栈,能编写出比任何其他语言能实现的快得多的程序。缺点是难学、语法晦涩、坚持效率,造成大量额外代码,移植性:接近零。因为这门语言是为一种单独的处理器设计的,根本没移植性可言。通过对这程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。但这次是一个综合的程序,平时的很多程序都用到了。很多子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。不可否认,本程序存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!我对按成绩排序这一块,有点不是很熟悉,在做实验的时候,卡在了这个环节。老师在上机课的时候,把同学的代码拿出来给我讲解的时候,自己跟的太慢,还是没懂。对于冒泡排序,我在之前的作业中,用到过,但是,我在本次实验中,知道具体该怎么操作,但是对于代码的写作,还是不太熟悉。总会在这样那样的问题中卡住。在同学讲解过后,我依旧存在着一些问题,这些问题有些都是书上有的,还有就是老师在上课举例的时候,给我们讲解的知识点,通过翻书,翻笔记我明白了那些问题的答案。出现这些问题的原因就在于我上课听课的认真程度,以及下来做实验不爱自己翻书看看,只是会问问,这样就导致了我在知识点上面的熟悉程度不够,用的时候就记不清楚,导致程序出错。在老师帮我改过程序之后,我完成了第二个功能。在第三个功能里面,之前的录入和比较在第二功能里面都用过,所以写起来应该没什么问题。但是在我写完这个功能的时候,运行程序得到的不是准确的结果。自己调了很久,确定某个地方有问题,但就是找不出来问题在哪里。只能把问题注释出来,把代码发给老师帮我调试。在老师花费了不少的时间,断定代码的问题在前面,而不在标注的那。果然,老师一次看出了我的问题,就是上课时候老师讲的内容,我自己把错的记下来了,然后导致程序出错,浪费了老师大量的时间。在本次实验中,自己在学习中存在的问题很明显,就是在老师讲课的时候,自己听课的认真程度,和下来在课后有没有多看看书的这一方面。由于自己的懒惰,让这次的实验也变得难了起来。能在课下多看看书,对自己的帮助是无限大的。总的来说,在这次的实验中,我看到了自己的问题,同学的帮助和老师耐心的帮我们调程序,给我们答疑。之后会有一个汇编的课程设计,我相信,多看看书,我在课程设计上面不会像这次这样问题很多。华北科技学院综合性实验报告第8页教师评价评定项目ABCD评定项目ABCD算法正确操作熟练程序结构合理实验结果正确功能完善文字流畅、报告规范其他:评价教师签名:李冬艳XXXX年X月X日
本文标题:用汇编对学生-学号-成绩排序
链接地址:https://www.777doc.com/doc-5625224 .html