汇编试验报告-学生信息管理系统_第1页
汇编试验报告-学生信息管理系统_第2页
汇编试验报告-学生信息管理系统_第3页
汇编试验报告-学生信息管理系统_第4页
汇编试验报告-学生信息管理系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生信息管理系统1。 实验类别使用汇编语言编程2. 实验内容和实验目的学生的信息包括姓名、班级、学号和成绩,其中成绩精确到1位小数。编写程序实现以下功能:(1)可以录入学生的信息,成绩以十进制形式录入,并显示;(2)可以按成绩进行排序显示;(3)可以统计平均成绩;(4)可以统计不及格、6070、7080、8090、90100各分数段的人数.3。 实验设备环境Windows 7 操作系统的pc机 ,使用QASM270编译器环境下编写。4。 实验实现过程及方法首先数据采用二维数组的形式进行存储,分为学生信息部分与成绩部分。然后将输入学生数也保存在一个一维数组中.然后再信息的存储过程中,对于字符串输

2、入进行转换,以二进制的形式存储在数据段中。然后采用冒泡排序,对于数据段中的人员信息进行排序.以成绩为参数。然后再对每个人员成绩进行遍历,统计各个数据层次中人员数,然后再成绩遍历的同时,将平均成绩也同时求出,在求平时成绩的时候,首先先将整数部分乘10 然后再加上小数部分,以便于后续的输出。将排序后的人员信息及成绩显示出来,然后将平均成绩也同时打印出来,还有各个分数层次中的人员数也都一并显示出来.下面是一些主要代码来实现上述过程:;数据部分 NUMBER DB 3 DUP(0) ;第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进制) ;用20字节单元表示学生信息

3、,0-19中:0对应最大字符,1对应实际输入,218对应输入信息,19对应'$ INFORMATION DB 99 DUP(20 DUP(0) ;用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数 GRADE DB 99 DUP(7 DUP(0)) AVERAGE_GRADE_BUFFER DB 2 DUP(0) ;第一个存整数部分(二进制形式),STORE_STUDENT_NUM ;存储学生总数,结果送cx中STORE_STUDENT_INFORMATION ;存储学生信息STORE_STUDENT_GRADE ;存储每个学生

4、成绩SORT ;采用冒泡排序_DISPLAY ;显示结果FIND_RESULT ;显示平均成绩和分段人数关键算法的流程图:关于分段人数与总成绩的计算 冒泡排序算法:处理计算计算总成绩60?70?80?90?<=100错误返回NNNNNA+B+C+D+E+YYYYY处理排序冒泡i=0 交换i+Ki<=Ki+1i=counter?返回YNYN5.效果图输入三人信息,班级 学好 姓名,然后输入此人成绩。可以看到三人的按成绩排序,然后将平均值输出,而且统计了各个分数区间的人数。输入5人信息,并将其打印出来。6. 实验心得通过编写学生管理系统的汇编实验,让我对汇编语言有了很深的了解,对于语言

5、的熟悉度也提高了很多。在编写的过程中遇到了很多的问题,由于汇编语言使用起来比较繁琐(个人感觉),很多内部运行的数据不能很好的呈现出来,所以对数据的保存,处理等方面出现了很大的错误,主要是在字符的输入与二进制的转换,还有就是在数据处理的时候会出现很多标志位,这些标准为对于处理后数据的保存有很大的影响,但是通过课本上的实验例子,对于这些问题基本上都能得到一定的解决。还有就是在需要跳转的时候,由于跳转指令使用对标志位或者条件使用比较灵活,有很多种的跳转指令,这些指令在使用起来是很方便但是由于判断条件很多,可能不小心 就出现了跳转出错。还有就是,跳转不到想要跳转的地方。这些问题需要在编写的过程中非常的

6、小心,同时也能将这些指令得使用规则得到一个很好的理解与记忆。总之,在此次的汇编实验的编写过程中,理解了很多在课堂上学习到的知识,也同时记忆了这些指令的使用规则与方法。对于汇编语言有了一定程度的理解与掌握.源程序:DATAS SEGMENT ;此处输入数据段代码 ; 输入输出提示字符STUDENT_NUM DB Please input the number of students(1-99):','STUDENT_INFORMATION DB 0DH,0AH,Please input the student information(class id name):',0D

7、H,0AH,$STUDENT_GRADE DB 0DH,0AH,'Please input the student grade(0。0-100.0):',0DH,0AH,$'AVERAGE_GRADE DB 0DH,0AH,The average grade is:','RESULT1 DB 0DH,0AH,The number of student in > =90 is:',$' ;各分数段人数 RESULT2 DB 0DH,0AH,The number of student in 8090 is:,'$ RESULT3

8、 DB 0DH,0AH,The number of student in 7080 is:,$' RESULT4 DB 0DH,0AH,'The number of student in 6070 is:', RESULT5 DB 0DH,0AH,'The number of student in =60 is:,'' GRADE_RANK DB 0DH,0AH,'The grade list(high to low)is:,0DH,0AH,'$ ;打印排名 BLANK DB ,'$ HUANHANG DB 0DH,0AH

9、,KAISHISHUCHU DB 0DH,0AH,'*,0DH,0AH,'$' ;数据 NUMBER DB 3 DUP(0) ;第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进制) ;用20字节单元表示学生信息,019中:0对应最大字符,1对应实际输入,2-18对应输入信息,19对应' INFORMATION DB 99 DUP(20 DUP(0) ;用7字节单元来存分数,0-6中,04对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数 GRADE DB 99 DUP(7 DUP(0)) AVERAGE_G

10、RADE_BUFFER DB 2 DUP(0) ;第一个存整数部分(二进制形式),第二个存小数部分(二进制形式) N0 DB 0 ;各分数段人数存储区(二进制形式) N1 DB 0 N2 DB 0 N3 DB 0 N4 DB 0 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: ;此处输入代码段代码 MOV AX,DATAS MOV DS,AX MOV SI,0 ;指向每个学生信息 MOV DI,0 ;指向每个学生成绩 MOV CX,100 ;初始化学生数 MOV DX, OFFSET STUDENT_NUM ;请求输入学生总数

11、MOV AH,09 INT 21H CALL STORE_STUDENT_NUM ;存储学生总数,结果送cx中 CMP CX,0 ;输入为0退出 JLE OUTTODOS CMP CX,100 ;学生数超出本程序范围,退出 JGE OUTTODOS INPUT: MOV DX, OFFSET STUDENT_INFORMATION ;请求输入学生信息 MOV AH,09 INT 21H CALL STORE_STUDENT_INFORMATION ;存储学生信息 ADD SI,20 ;指向下一个学生信息 MOV DX, OFFSET STUDENT_GRADE ;请求输入学生成绩 MOV AH

12、,09 INT 21H CALL STORE_STUDENT_GRADE ;存储每个学生成绩 ADD DI,7 ;指向下一个学生 LOOP INPUT ;循环,直到输入所有学生成绩 CALL SORT ;排序 CALL _DISPLAY ;显示结果 CALL FIND_RESULT ;显示平均成绩和分段人数 OUTTODOS: MOV AH,1 ;任意键结束 INT 21H MOV AX,4C00H ;返回DOS INT 21H;*存储学生数目的函数* STORE_STUDENT_NUM PROC ;调用之后,cx中存储了学生数(二进制) PUSH AX PUSH BX MOV BX,0 S1

13、: MOV AH,1 INT 21H CMP AL,0DH ;是否为回车 JE S2 AND AL,0FH ;转换为非压缩的BCD码 MOV NUMBERBX,AL INC BX JMP S1 S2: CMP BX,2 JG S5 ;大于2 JZ S3 ;等于2 ;小于2 MOV AL,NUMBER JMP S4 S3: MOV AH,NUMBER MOV AL,NUMBER+1 AAD ;BCD码转换为二进制数 S4: MOV NUMBER+2,AL MOV CX,0 MOV CL,NUMBER+2 S5: POP BX POP AX RET STORE_STUDENT_NUM ENDP;*

14、存储学生信息的函数* STORE_STUDENT_INFORMATION PROC PUSH AX PUSH BX PUSH DX MOV AL,18 MOV INFORMATIONSI,AL LEA DX,INFORMATIONSI MOV AH,0AH INT 21H MOV BL,INFORMATIONSI + 1 ;实际输入的字符个数 MOV AL,' ' MOV INFORMATIONSI + BX + 2,AL ;将回车换成 MOV INFORMATIONSI+19,$' ;将每个存储单元的最后一个字节置为'$以便输出 POP DX POP BX P

15、OP AX RET STORE_STUDENT_INFORMATION ENDP;*存储学生成绩的函数* STORE_STUDENT_GRADE PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,0 MOV CX,0 MOV DX,DI DEAL0: MOV AH,1 INT 21H CMP AL,0DH ;判断是否为回车 JZ DEAL2 ;是回车 CMP AL,。' ;是否为小数点 JNZ DEAL1 ;不是小数点 MOV BX,CX ;bx指向小数点处 INC BX ;标记小数点字符出现在第几个位置 DEAL1: PUSH BX MOV BX

16、,DX MOV GRADEBX,AL POP BX INC CX ;记录输入字符的个数 INC DX JMP DEAL0 DEAL2: CMP BX,0 JNZ DEAL3 ;有小数点 ;无小数点 CMP CX,3 JG GOUT ;大于100 JZ DEAL4 ;等于100 ;小于100 CMP CX,2 JZ DEAL5 ;输入数目为2位数 ;个位数 DEAL6: ;处理个位数 MOV AL,GRADEDI SUB AL,'0 MOV GRADEDI + 5,AL JMP GOUT DEAL5: ;处理2位数 MOV AH,GRADEDI AND AH,0FH MOV AL,GRA

17、DEDI + 1 AND AL,0FH AAD MOV GRADEDI + 5,AL JMP GOUT DEAL4: ;处理3位数 MOV AL,100 MOV GRADEDI + 5,AL JMP GOUT DEAL3: ;处理带有小数部分的成绩 MOV AL,GRADEDI + BX ;将小数部分处理 SUB AL,'0' MOV GRADEDI + 6,AL CMP BX,4 JZ DEAL4 ;'。出现在输入字符的第四位,则输入的整数部分为3位数 JG GOUT ;整数部分大于3位数 CMP BX,3 JZ DEAL5 ;。'出现在输入字符的第三位,则输

18、入的整数部分为2位数 JMP DEAL6 ;否则为个位数 GOUT: POP DX POP CX POP BX POP AX RET STORE_STUDENT_GRADE ENDP;*排序学生成绩的函数* SORT PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV DX,0 MOV DL,NUMBER+2 LOOP1: ;使用冒泡排序法 MOV CX,DX MOV DI,0 MOV SI,0 LOOP2: ;先比整数部分,再比小数部分 MOV AL,GRADEDI + 5 CMP AL,GRADEDI + 12 JG NEXT

19、;大于,向下个移动 JL SWAP1 ;小于,交换成绩,名字 ;等于,比较小数部分 MOV AL,GRADEDI + 6 CMP AL,GRADEDI + 13 JGE NEXT ;大于或等于,向下个移动 JL SWAP1 ;小于,交换成绩,名字 SWAP1: MOV BX,SI SWAP11: ;交换学生信息 MOV AL,INFORMATIONBX + 2 XCHG AL,INFORMATIONBX + 22 MOV INFORMATIONBX + 2,AL INC BX CMP AL,' JNZ SWAP11 PUSH BX MOV BX,0 SWAP2: ;交换学生成绩 MOV

20、 AL,GRADEDI + BX XCHG AL,GRADEDI + BX + 7 MOV GRADEDI + BX,AL INC BX CMP BX,7 JNZ SWAP2 POP BX NEXT: ADD SI,20 ADD DI,7 DEC CX JNZ LOOP2 DEC DX JNZ LOOP1 POP DI POP SI POP DX POP CX POP BX POP AX RET SORT ENDP;*显示最后结果的函数* FIND_RESULT PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV BX,0 MOV

21、CX,0 MOV CL,NUMBER+2 ;cl中保存学生人数 MOV DI,0 MOV SI,0 F1: MOV AL,GRADEDI + 5 CMP AL,100 JG FOUT ;大于100 JZ F90 ;等于100 ;小于100 CMP AL,90 JGE F90 ;大于等于90 ;小于90 CMP AL,80 JGE F80 ;大于等于80 ;小于80 CMP AL,70 JGE F70 ;大于等于70 ;小于70 CMP AL,60 JGE F60 ;大于等于60 ;小于60 ;处理60 MOV DL,N4 INC DL MOV N4,DL FNEXT: ;处理平均成绩 处理方式

22、:整数部分10+小数部分,结果先除以学生人数,再输出(输出整数时除以10) MOV AL,GRADEDI + 5 MOV DL,10 MUL DL MOV DL,GRADEDI + 6 MOV DH,0 ADD AX,DX ADD BX,AX JMP F2 FOUT: POP DI POP SI POP DX POP CX POP BX POP AX F90: ;处理=90 MOV DL,N0 INC DL MOV N0,DL JMP FNEXT F80: ;处理大于等于80小于90 MOV DL,N1 INC DL MOV N1,DL JMP FNEXT F70: ;处理大于等于70小于80

23、 MOV DL,N2 INC DL MOV N2,DL JMP FNEXT F60: ;处理大于等于60小于70 MOV DL,N3 INC DL MOV N3,DL JMP FNEXT F2: ADD DI,7 DEC CX JNZ F1 ;处理所有学生 MOV DX,OFFSET KAISHISHUCHU ;打印一段* MOV AH,09 INT 21H MOV DX,OFFSET AVERAGE_GRADE ;打印平均成绩 MOV AH,09 INT 21H MOV AX,BX MOV DX,0 MOV CX,0 MOV CL,NUMBER+2 DIV CX MOV CL,10 DIV

24、CL CALL SHOW ;先打印平均成绩的整数部分 PUSH AX MOV DL,。 ;打印'.' MOV AH,2 INT 21H POP AX MOV AL,AH CALL SHOW ;再打印平均成绩的小数部分 MOV DX,OFFSET RESULT1 ;输出大于等于90的人数 MOV AH,09 INT 21H MOV AL,N0 CALL SHOW MOV DX,OFFSET RESULT2 ;输出大于等于80并小于90的人数 MOV AH,09 INT 21H MOV AL,N1 CALL SHOW MOV DX,OFFSET RESULT3 ;输出大于等于70并

25、小于80的人数 MOV AH,09 INT 21H MOV AL,N2 CALL SHOW MOV DX,OFFSET RESULT4 ;输出大于等于60并小于70的人数 MOV AH,09 INT 21H MOV AL,N3 CALL SHOW MOV DX,OFFSET RESULT5 ;输出小于60的人数 MOV AH,09 INT 21H MOV AL,N4 CALL SHOW RET FIND_RESULT ENDP;*输出分数排序的函数* _DISPLAY PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV DX, OFFSET GRADE_RANK MOV AH,09 INT 21H MOV CX,0 MOV CL,NUMBER+2 ;cl中保存学生人数 MOV DI,0 MOV SI,0 D1: MOV DX, OFFSET INFORMATION ADD DX,SI ADD DX,2 MOV AH,09

温馨提示

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

评论

0/150

提交评论