ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:114.47KB ,
资源ID:4510581      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4510581.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编试验报告学生信息管理系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编试验报告学生信息管理系统.docx

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码),第三个存学生数(二

3、进制) ;用20字节单元表示学生信息,0-19中:0对应最大字符,1对应实际输入,2-18对应输入信息,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_

4、GRADE ;存储每个学生成绩SORT ;采用冒泡排序_DISPLAY ;显示结果FIND_RESULT ;显示平均成绩和分段人数关键算法的流程图:关于分段人数与总成绩的计算 冒泡排序算法:5.效果图输入三人信息,班级 学好 姓名,然后输入此人成绩。可以看到三人的按成绩排序,然后将平均值输出,而且统计了各个分数区间的人数。输入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):,0DH,0AH,$STUDENT_GRADE DB 0DH,0AH,Please input the student grade,0DH,0AH,$AVERAGE_GRADE DB 0DH,0A

7、H,The average grade is:,$RESULT1 DB 0DH,0AH,The number of student in =90 is:,$ ;各分数段人数 RESULT2 DB 0DH,0AH,The number of student in 80-90 is:,$ RESULT3 DB 0DH,0AH,The number of student in 70-80 is:,$ RESULT4 DB 0DH,0AH,The number of student in 60-70 is:,$ RESULT5 DB 0DH,0AH,The number of student in =

8、60 is:,$ GRADE_RANK DB 0DH,0AH,The grade list(high to low)is:,0DH,0AH,$ ;打印排名 BLANK DB ,$ HUANHANG DB 0DH,0AH,$KAISHISHUCHU DB 0DH,0AH,*,0DH,0AH,$ ;数据 NUMBER DB 3 DUP(0) ;第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进制) ;用20字节单元表示学生信息,0-19中:0对应最大字符,1对应实际输入,2-18对应输入信息,19对应$ INFORMATION DB 99 DUP(20 DUP(0

9、) ;用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数 GRADE DB 99 DUP(7 DUP(0) AVERAGE_GRADE_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 MO

10、V SI,0 ;指向每个学生信息 MOV DI,0 ;指向每个学生成绩 MOV CX,100 ;初始化学生数 MOV DX, OFFSET STUDENT_NUM ;请求输入学生总数 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_ST

11、UDENT_INFORMATION ;存储学生信息 ADD SI,20 ;指向下一个学生信息 MOV DX, OFFSET STUDENT_GRADE ;请求输入学生成绩 MOV AH,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

12、 INT 21H;存储学生数目的函数 STORE_STUDENT_NUM PROC ;调用之后,cx中存储了学生数(二进制) PUSH AX PUSH BX MOV BX,0 S1: 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码转换为二进制数 S

13、4: MOV NUMBER+2,AL MOV CX,0 MOV CL,NUMBER+2 S5: POP BX POP AX RET STORE_STUDENT_NUM ENDP;存储学生信息的函数 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 ;

14、将回车换成 MOV INFORMATIONSI+19,$ ;将每个存储单元的最后一个字节置为$以便输出 POP DX POP BX POP 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 B

15、X,CX ;bx指向小数点处 INC BX ;标记小数点字符出现在第几个位置 DEAL1: PUSH BX MOV BX,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

16、GOUT DEAL5: ;处理2位数 MOV AH,GRADEDI AND AH,0FH MOV AL,GRADEDI + 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位数

17、 CMP BX,3 JZ DEAL5 ;.出现在输入字符的第三位,则输入的整数部分为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

18、 + 5 CMP AL,GRADEDI + 12 JG NEXT ;大于,向下个移动 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 B

19、X MOV BX,0 SWAP2: ;交换学生成绩 MOV 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 PU

20、SH SI PUSH DI MOV BX,0 MOV 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 ;处理=90 MOV DL,N0 INC DL M

21、OV N0,DL JMP FNEXT F80: ;处理大于等于80小于90 MOV DL,N1 INC DL MOV N1,DL JMP FNEXT F70: ;处理大于等于70小于80 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

22、 ;打印平均成绩 MOV AH,09 INT 21H MOV AX,BX MOV DX,0 MOV CX,0 MOV CL,NUMBER+2 DIV CX MOV CL,10 DIV 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 ;输出大于等

23、于80并小于90的人数 MOV AH,09 INT 21H MOV AL,N1 CALL SHOW MOV DX,OFFSET RESULT3 ;输出大于等于70并小于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;输出

24、分数排序的函数 _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 INT 21H MOV DX, OFFSET BLANK ;打印一段空白 MOV AH,09 INT 21H mov Al,GRADEDI +

25、5 push ax MOV GRADEDI + 5,$ ;将保存成绩的单元中第6个字节置为$,便于输出 MOV DX, OFFSET GRADE ;输出成绩 ADD DX,DI MOV AH,09 INT 21H pop ax mov GRADEDI + 5,Al MOV DX, OFFSET HUANHANG ;打印换行 MOV AH,09 INT 21H ADD SI,20 ADD DI,7 DEC CX JNZ D1 ;直至将所有成绩都输出 POP DI POP SI POP DX POP CX POP BX POP AX RET _DISPLAY ENDP;将二进制数输出的函数 SHO

26、W PROC PUSH AX PUSH DX PUSH CX PUSH BX MOV CL,100 MOV AH,0 DIV CL ;将al中的二进制数除以100 MOV BX,AX ;保存 CMP AL,0 JZ X1 ;如果商为0,则表示原数小于100 ;否则将百位数打印出来 MOV DL,AL ADD DL,30H MOV AH,2 INT 21H X1: MOV AL,BH MOV AH,0 MOV CL,10 DIV CL ;将al中的二进制数除以10 MOV BX,AX ;保存 CMP AL,0 JZ X2 ;如果商为0,则表示原数小于10 ;否则将十位打印出来 MOV DL,AL ADD DL,30H MOV AH,2 INT 21H X2: ;打印个位 MOV DL,BH ADD DL,30H MOV AH,2 INT 21H POP BX POP CX POP DX POP AX RET SHOW ENDP;子程序结束 CODES ENDS END START;代码段结束

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1