资源描述
华北科技学院综合性实验报告
华北科技学院综合性
实 验 报 告
课程名称 汇 编 语 言
实验学期 2011 至 2012 学年 第 1 学期
学生所在系部 计算机学院网络工程系
年级 09 专业班级 网络工程B093
学生姓名 李金栋 学号 200907024324
任课教师 李冬艳
实验成绩
计算机学院制
实验报告须知
1、 学生上交实验报告时,必须为打印稿(A4纸)。页面空间不够,可以顺延。
2、 学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。
3、 教师应该填写的内容包括:实验成绩、教师评价等。
4、 教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。
5、 未尽事宜,请参考该课程的实验大纲和教学大纲。
《 汇 编 语 言》课程综合性实验报告
开课实验室:软件一实验室 2011年 12 月6 日
实验题目
显示学生名次表
一、实验目的
显示学生名次表
二、设备与环境
PC兼容机、Windows操作系统、汇编程序masm611
三、实验内容
编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字节的GRADE数组中,其中GRADE+N保存学号N+1的学生成绩。然后根据GRADE中的学生成绩,把学生名次填入50字节的RANK数组中,其中RANK+N的内容是学号为N+1学生的名次。再按学号顺序和学生名次顺序把学生成绩显示出来。
实验要求:1.必须画流程图。2.本程序要求要有多重循环和子程序及宏,其中 成绩输入、计算学生名次、显示学生名次都分别用子程序,也可用宏处理
四、实验结果及分析(包括①已完成什么功能,②如何实现的、遇到的问题和解决办法、流程图和关键代码解释,③收获和体会等)
1、按照题目要求,本程序实现了以下功能:(1)输入成绩,不需要事先设定学生数、按照提示输入决定是否再次输入与停止。(2)按学号显示成绩和名次。
2、程序流程
首先,先定义两个宏:换行和空格。主程序包括调用三个子程序:INGRADE(输入成绩)、PAILIE(排列)、XIANSHI(按姓名显示)。
主程序流程图
输入子程序的流程图
开始
CX赋1,SI赋0
输入学生成绩
成绩存入GRADE[SI],CX存入XUEHAO[SI]
SI+1,CX+1
是否再次输入
是否输入错误
结束
Y
N
Y
Y
排序子程序流程
处理同分的情况:
输出子程序
由于输出学号、成绩、排名使用的算法基本一致都重复使用输出2位十进制数的方法、流程简单,在此省略此部分流程图。
运行结果:
本程序的设计思想是采用默认顺序输入成绩、用两个数组分别存放成绩、名次。从运行结果看,
已经完成了题目要求,并实现了简单的输入纠错。
关键代码分析:
PAILIE PROC
MOV CX,0
MOV CL,NUMBER
LOOP1:
MOV BH,NUMBER ;
;冒泡排序 ;BH用来计数的计名次,
;从输入的数中选一个数跟其它数比较,
;如果大 就减一这样可以算出来他的名次
;并存在BX寄存器中。。。
MOV AH,CL ;用来保护CX寄存器
MOV SI,0 ;SI用来遍历各个数的
DEC CL ;N+1学号的成绩存在N中
MOV BP,CX ;用来取GRADE数组中的数据以便跟其它数据比较
MOV AL,GRADE[BP] ;取出数据放入CL中
MOV CL,NUMBER ;每次都循环NUMBER次
LOOP2:
CMP AL,GRADE[SI]
JG CHANGE
INC SI
LOOP LOOP2
JMP JIXU
CHANGE:DEC BH
INC SI
LOOP LOOP2
JIXU:MOV CL,AH ;恢复CX寄存器
DEC CL
MOV BP,CX
MOV RANK[BP],BH ;将获得的名次存入RANK数组中
INC CL
LOOP LOOP1
;以下代码类似于上面计算名次的代码。也是冒泡算法。
MOV SI,0 ;处理分数相等的情况,
MOV AL,NUMBER
CBW
MOV CX,AX
LOOP3:
MOV DI,CX
DEC CX
MOV BP,0
MOV BX,0
MOV SI,CX
MOV AL,RANK[SI]
MOV CX,0
MOV CL,NUMBER
LOOP4:CMP AL,RANK[BP]
JE YOUHUA
INC BP
LOOP LOOP4
JMP JIXU1
YOUHUA:
INC BX ;用来计算有几个数是相同的
INC BP ;遍历每一个数
LOOP LOOP4
JIXU1:MOV CX,DI
DEC BX
SUB RANK[SI],BL ;相同成绩的学生名次减BL
LOOP LOOP3
RET
PAILIE ENDP
程序总结与感想:
程序的核心算法在于排序成绩、计算学生名次、这里主要使用冒泡算法,关于计算排名,默认某个学生a排名是max,如果有学生成绩比他大,a的排名自减。这部分代码加在冒泡的算法中一起执行。对于两个学生分数相同的情况,上面的流程图给出了解释,源代码中有详细的注释。在处理相同分数时,外循环SI从end到0,内循环BP from 0 to end,BX 用来存放某次外循环分数相同的个数,也包括自己,相等BX加1,BP指针后移;不相等BP指针后移,之后恢复CX,
BX减1,RANK[SI]减BX,进入外循环,SI指针前移。直至循环结束,处理完同分的情况。
感想:编写这个程序,个人认为可以用简单的结构实现简单的功能,定义两个宏为了使用方便,由于能力有限采用按顺序输入。关于程序,借鉴冒泡排序和其他同学的意见。子程序的算法是整个程序关键,寄存器使用要有固定的格式风格,可以减少错误,提高效率。令外,程序模块化更有利于修改和检查,提高程序可读性。个人认为,只要程序能实现题目的要求,程序就是好程序,不必拘泥于多余的功能和复杂算法。
教 师 评 价
评定项目
A
B
C
D
评定项目
A
B
C
D
算法正确
操作熟练
程序结构合理
实验结果正确
语法、语义正确
文字流畅、报告规范
其他:
评价教师签名:李冬艳
2011年12 月 16 日
第 10 页
展开阅读全文