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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

学生成绩排名汇编语言综合实验报告.docx

1、学生成绩排名汇编语言综合实验报告华北科技学院综合性实 验 报 告 课程名称 汇 编 语 言 实验学期 2011 至 2012 学年 第 1 学期学生所在系部 计算机学院网络工程系 年级 2009 专业班级 网络B091 学生姓名 罗希 学号 200907024114 任课教师 李冬艳 实验成绩 计算机学院制 汇 编 语 言课程综合性实验报告开课实验室:软件一实验室 2011年 12 月6 日实验题目显示学生名次表一、实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。二、设备与环境PC兼容机、Windows操作系统、汇编

2、程序masm611。三、实验内容编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字节的GRADE数组中,其中GRADE+N保存学号N+1的学生成绩。然后根据GRADE中的学生成绩,把学生名次填入50字节的RANK数组中,其中RANK+N的内容是学号为N+1学生的名次。再按学号顺序把学生成绩及学生名次显示出来。1.必须画流程图。2.本程序要求要有多重循环和子程序,其中成绩输入、计算学生名次、显示学生名次都分别用子程序,也可用宏处理。四、实验结果及分析 本程序一共有5个子程序。子程序分别是INPUT键盘输入,COPY数据转存,CHANG 十进制数转换成二进制,SORT按成绩排序和PR

3、INT打印排序名单。输入界面:首先调用INPUT功能输入学号,姓名,成绩,存入BUFF1,BUFF2,BUFF3缓存中,此时的输入顺序就是他们排名。再调用COPY将3个缓存中的数据保存在NUBER,SNAME,SCORE1中。此时再调用CHANG功能把SCORE1中的成绩转换成2进制存到SCORE2中。用冒泡排序法从高到低进行排序,此时SCORE2的顺序改变,顺序号也改变,而NUBER,SNAME,SCORE1中的数据都不改变。最后,调用PRINT方法输出,按照成绩降序进行输出。根据他们的顺序号找出他们在NUBER,SNAME,SCORE1中的学号,姓名,成绩输出。子程序流程图:主程序: IN

4、PUT子程序: 主要代码分析: LEA DX,INFOR1 MOV AH,9 INT 21H LEA DX,BUFF1 MOV AH,10 INT 21H MOV AL,BUFF1+1 ADD AL,2 MOV AH,0MOV SI,AX MOV BUFF1SI,0此代码是输入姓名的代码,首先讲缓存区BUFF1的偏移地址给DX调用10号功能输入一个字符串,然后将回车0D所在位置换为0便于输出显示。子程序COPY:关键代码分析: MOV CX,N+1 LEA SI,BUFF1+2 LEA DI,SNAME ADD DI,SIGN1 CLD REP MOVSB MOV CX,N MOV AX,$

5、LEA DI,BUFF1+2REP STOSBCX为姓名长度,将缓存区的姓名传入到SNAME中,SIGN1为他们的间隔,传完之后再将缓存区的数据清空,全部设置为$。学号和成绩也是如此。子程序CHANGE:关键代码:REPT2: MOV AL,SI CMP AL,30H JL EXIT1 CMP AL,39H JG EXIT1 AND AX,000FH XCHG AX,X MOV DX,10 MUL DX ADD X,AX INC SI LOOP REPT2 MOV AX,X MOV SCORE2DI,AX MOV X,0ADD SIGN2,2将成绩位数给CX,从BUFF2中取出第一位数给AL,

6、然后去掉ASCII码再将它与10相乘,再与X相加得到二进制成绩数最后存入到SCORE2中。子程序SORT:关键代码分析: MOV CX,P DEC CXLOOP1: PUSH CX MOV BX,0 MOV SI,0LOOP2: MOV AX,SCORE2BX CMP AX,SCORE2BX+M+1 JGE NEXT XCHG AX,SCORE2BX+M+1 MOV SCORE2BX,AX MOV AL,MINGCISI XCHG AL,MINGCISI+1 MOV MINGCISI,ALNEXT: ADD BX,M+1 INC SI LOOP LOOP2 POP CX LOOP LOOP1R

7、ET采用了冒泡排序的方法,将SCORE2表中的成绩从大到小排序,MINGCI中的顺序也同时按照成绩高低排序。子程序print::关键代码: MOV AX,0 MOV AL,MINGCIDI DEC AL MOV BL,9 MUL BL LEA DX,SNAME ADD DX,AX MOV AH,9 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DHINT 21H取出它的名次,根据名次知道了它的输入时顺序,计算它的名字在SNAME中的位置。找到了它的名字然后输出名字。学号,成绩也是如此。全部代码: DATAS SEGMENT INFOR0 DB 0AH,

8、0DH,SORT=$ INFOR1 DB 0AH,0DH,INPUT NAME:$ INFOR2 DB 0AH,0DH,INPUT SCORE:$ INFOR3 DB 0AH,0DH,INPUT NUMBER:$ OUT1 DB NUBER:$ OUT2 DB NAME:$ OUT3 DB SCORE:$ N EQU 8 M EQU 4 F EQU 3 P EQU 3 Q EQU 3 BUFF3 DB F,?,F DUP(0),$ BUFF1 DB N,?,N DUP(0),$ BUFF2 DB M,?,M DUP(0),$ NUMBER DB P DUP(F+1 DUP(0) SNAME D

9、B P DUP(N+1 DUP(0) SCORE1 DW P DUP(M+1 DUP(0) SCORE2 DW P DUP(M+1 DUP(0) MINGCI DB P DUP(0) X DW ? SIGN1 DW 0 SIGN2 DW 0 SIGN3 DW 0 CONT DB 1 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSMAIN PROC FARSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX MOV BX,0 MO

10、V CX,0 CALL INPUT CALL SORT CALL PRINT MOV AH,4CH INT 21HMAIN ENDPINPUT PROC INC BX CMP BX,P JA EXIT LEA DX,INFOR3 MOV AH,9 INT 21H LEA DX,BUFF3 MOV AH,10 INT 21H MOV AL,BUFF3+1 ADD AL,2 MOV AH,0 MOV SI,AX MOV BUFF3SI,0 LEA DX,INFOR1 MOV AH,9 INT 21H LEA DX,BUFF1 MOV AH,10 INT 21H MOV AL,BUFF1+1 ADD

11、 AL,2 MOV AH,0 MOV SI,AX MOV BUFF1SI,0 LEA DX,INFOR2 MOV AH,9 INT 21H LEA DX,BUFF2 MOV AH,10 INT 21H MOV AL,BUFF2+1 ADD AL,2 MOV AH,0 MOV SI,AX MOV BUFF2SI,0 MOV MINGCIBX-1,BL CMP BX,1 JZ LET1 ADD SIGN1,N+1 ADD SIGN2,Q ADD SIGN3,F+1LET1: CALL COPY JMP INPUTEXIT: RETINPUT ENDPCOPY PROC MOV CX,F+1 LEA

12、 SI,BUFF3+2 LEA DI,NUMBER ADD DI,SIGN3 CLD REP MOVSB MOV CX,F MOV AX,$ LEA DI,BUFF3+2 REP STOSB MOV CX,N+1 LEA SI,BUFF1+2 LEA DI,SNAME ADD DI,SIGN1 CLD REP MOVSB MOV CX,N MOV AX,$ LEA DI,BUFF1+2 REP STOSB MOV CX,M+1 LEA SI,BUFF2+2 LEA DI,SCORE1 ADD DI,SIGN2 CLD REP MOVSB LEA SI,BUFF2+2 MOV DI,SIGN2

13、CALL CHANGE RETCOPY ENDPCHANGE PROC MOV X,0 MOV CX,SI-1 AND CX,000FHREPT2: MOV AL,SI CMP AL,30H JL EXIT1 CMP AL,39H JG EXIT1 AND AX,000FH XCHG AX,X MOV DX,10 MUL DX ADD X,AX INC SI LOOP REPT2 MOV AX,X MOV SCORE2DI,AX MOV X,0 ADD SIGN2,2EXIT1: RETCHANGE ENDPSORT PROC MOV CX,P DEC CXLOOP1: PUSH CX MOV

14、 BX,0 MOV SI,0LOOP2: MOV AX,SCORE2BX CMP AX,SCORE2BX+M+1 JGE NEXT XCHG AX,SCORE2BX+M+1 MOV SCORE2BX,AX MOV AL,MINGCISI XCHG AL,MINGCISI+1 MOV MINGCISI,ALNEXT: ADD BX,M+1 INC SI LOOP LOOP2 POP CX LOOP LOOP1 RETSORT ENDPPRINT PROC LEA DX,INFOR0 MOV AH,9 INT 21H MOV CX,P MOV BX,0 MOV AX,0 MOV DI,0REPT3

15、: MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH INT 21H MOV DL,CONT MOV AH,2 INT 21H INC CONT MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH INT 21H MOV AX,0 MOV AL,MINGCIDI DEC AL MOV BL,4 MUL BL LEA DX,NUMBER ADD DX,AX MOV AH,9 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH INT 21H MOV AX,0 MOV AL,MINGCIDI DEC A

16、L MOV BL,9 MUL BL LEA DX,SNAME ADD DX,AX MOV AH,9 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH INT 21H MOV AX,0 MOV BX,0 MOV AL,MINGCIDI DEC AL MOV BL,5 MUL BL LEA DX,SCORE1 ADD DX,AX MOV AH,9 INT 21H INC DI LOOP REPT3 RETPRINT ENDPCODES ENDSEND START收获体会: 通过这次的汇编程序,我从中学习到了很多知识。虽然刚开始的时候遇到了很多难题,但是通

17、过与老师、同学的交流之后,逐步克服了一个个的难题。提高了自己编程的思维能力,在将来的学习,生活之中能够快速的解决问题。汇编相对于别的编程语言而言,难度是比较大。汇编是直接对CUP进行操作,能够直接控制计算机编程。由于汇编不像JAVA 那样的高级编程语言面向对象,在编程的时候思维有点乱,容易出错,而且小的错误也不容易找到,特别是程序代码长的时候。 子程序INPUT的程序中主要有三个部分:学号输入,姓名输入,成绩输入,它们都设有缓区,分别为BUFF1,BUFF2,BUFF3。输入方式是调用了10号功能,输入一个字符串,长度也已经在之前设计好了。学号,姓名,成绩都是相同的输入方式,在输入完之后,由于

18、最后一个回车符会被接收,所以,在每次输入完之后,将最后的回车符换为0,便于输出显示。同时也将它们的次序保存到MINGCI之中。学号,姓名,成绩输入完成后,子程序INPUT再调用COPY将缓存区转存到学号,姓名,成绩存储单元之中。 子程序COPY的设计业分为三个部分:学号转存,姓名转存,成绩转存。三个数据的转存方法也相同的。首先将长度传给CX寄存器,再将源目标地址和目的地址分别给SI和DI,再调用REP MOVSB 进行串传送,传送完成之后,要将原来的BUFF缓存区清空,全部设置为$。但是由于成绩是以十进制保存的,所以还要转换为二进制。则在子程序COPY中调用CHANGE程序 子程序CHANGE

19、,次程序主要是将缓存区的成绩转换成二进制并保存到SCORE2中,其中用刀了LOOP循环,首先,将成绩位数赋值给CX,X置0,取出成绩的最高位。与000F相与,保存最低4位,也就是转换成二进制。X再乘10。加上成绩的这一位十进制值。指针下移到下一个再进行循环知道全部完成。最后将转换好的十进制数存入SCORE2之中。子程序SORT,次程序主要运用了冒泡排序法,先将学生人数减1给CX,再将CX入栈保存外循环。先拿出前两个人的成绩比较,若前者大于后者,则转入下一个,若小于,则交换他们的顺序,同时也要交换MINGCI存储器之中的顺序。第一次冒泡排完之后,CX出栈,再进行第二次,直到最后结束。子程序PRINT,将学生的学号,姓名,成绩,按照成绩降序输出。其中关键是要利用MINGCI中排好的顺序分别找到学生的,学号,姓名,成绩所在的位置,进行输出。教 师 评 价评定项目ABCD评定项目ABCD算法正确操作熟练程序结构合理实验结果正确语法、语义正确文字流畅、报告规范其他: 评价教师签名:李冬艳2011年12 月 16 日

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

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