您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 北邮汇编语言实验报告
微机原理汇编实验一专业计算机科学与技术班级学生学号目录一、实验要求...................................................................3二、实验设计...................................................................31.分析及算法思想...................................................................32.数据结构...............................................................................33.子程序...................................................................................44.流程图...................................................................................4三、运行实例..................................................................6四、实验总结..................................................................6五、附页(源代码).......................................................7一、实验要求:一个学生的信息包括姓名、班级、学号(班内序号)、成绩。试编写程序(1)能录入学生成绩(十进制形式);提示:输入形如:tom3011695(2(3(4)能统计不及格、60-70、70-80、80-90、90-100各分数段的人数。二、实验设计:1.分析及算法思想:1)采用数组进行数据存储:学生数目信息数组(存储学生数目),学生信息数组(按班级-学号-姓名格式存储),平均成绩数组。五个DB变量记录各分数段人数。(2)输入学生数目保存在数组中,提示输入学生信息并存储,对于字符串输入进行转换,以二进制的形式存储在数据段中。采用冒泡排序对数据段中的人员信息进行排序,以成绩为参数进行遍历,统计各分数段人数并将同时求出平均成绩,输出运算结果。2.数据结构:(1)输入:a.学生数目数组numberdb3dup(0)说明:第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进制)b.学生信息数组informationdb99dup(20dup(0))说明:用20字节单元表示学生信息,0-19中:0对应最大字符,1对应实际输入,2-18对应输入信息,19对应'$'c.成绩数组gradedb99dup(7dup(0))说明:第一个存整数部分(二进制形式),第二个存小数部分(二进制形式)d.平均成绩数组average_grade_bufferdb2dup(0)说明:和成绩数组原理一样(2)排序:(按成绩分布排序)(3)提示信息:Student_num:提示输入学生数目student_information:提示输入学生信息student_grade:提示输入成绩信息average_grade:提示输出平均成绩grade_rank:提示输出成绩排名Result1:(90-100)分数段人数Result2:(80-90)分数段人数Result3:(70-80)分数段人数Result4:(60-70)分数段人数Result5:(0-60)分数段人数blank:输出空格,便于查看结果huanhang:输出换行,便于查看结果3.子程序:(1)store_student_num存储用户输入的学生数目;(2)store_student_information存储学生姓名和班级和学号;(3)store_student_grade存储学生成绩;(4)sort排序学生成绩的函数;(5)find_result显示最后结果的函数;(6)display输出分数排序的函数。(7)show将二进制数(不大于127的十进制整数)输出的函数4.流程图:三、运行实例:输入四个学生的信息:结果如下四、实验总结通过这次的汇编程序,我从中学习到了很多知识。虽然刚开始的时候遇到了很多难题,但是通过与老师、同学的交流之后,逐步克服了一个个的难题。提高了自己编程的思维能力,在将来的学习,生活之中能够快速的解决问题。汇编相对于别的编程语言而言,难度是比较大。汇编是直接对CUP进行操作,能够直接控制计算机编程。由于汇编不像JAVA那样的高级编程语言面向对象,在编程的时候思维有点乱,容易出错,而且小的错误也不容易找到,特别是程序代码长的时候。五、附页(源代码);输入学生数目格式:1到99的整数;输入学生信息格式:班级(class)-学号(NUM)—姓名(NAME),班级最多5位,学号最多5位,姓名最多6位,加上1位中间分隔符—;输入学生成绩格式:0.0-100.0最多一位小数;;!!!警告:任何错误的输入都将导致程序运行失败或错误!!!;;;#######################################################数据段开始DATASSEGMENT;此处输入数据段代码;;;输入输出提示字符student_numdb'Pleaseinputthenumberofstudents(1-99):',0dh,0ah,'$'student_informationdb0dh,0ah,'Pleaseinputthestudentinformation(CLASS-NUM-NAME):',0dh,0ah,'$'student_gradedb0dh,0ah,'Pleaseinputthestudentgrade(0.0-100.0):',0dh,0ah,'$'average_gradedb0dh,0ah,'Theaveragegradeis:',0dh,0ah,'$'result1db0dh,0ah,'Thenumberofstudentin[Up90]is:',0dh,0ah,'$';各分数段人数result2db0dh,0ah,'Thenumberofstudentin[80-90]is:',0dh,0ah,'$'result3db0dh,0ah,'Thenumberofstudentin[70-80]is:',0dh,0ah,'$'result4db0dh,0ah,'Thenumberofstudentin[60-70]is:',0dh,0ah,'$'result5db0dh,0ah,'Thenumberofstudentin[Below60]is:',0dh,0ah,'$'grade_rankdb0dh,0ah,'Thegraderank(fromhightolow)is:',0dh,0ah,'$';打印排名blankdb'','$'huanhangdb0dh,0ah,'$'kaishishuchudb0dh,0ah,'***********************************',0dh,0ah,'$';数据numberdb3dup(0);第一个存个/十位(ASCII码),第二个存个位(ASCII码),第三个存学生数(二进制);用20字节单元表示学生信息,0-19中:0对应最大字符,1对应实际输入,2-18对应输入信息,19对应'$'informationdb99dup(20dup(0));用7字节单元来存分数,0-6中,0-4对应输入字符,5对应输入整数部分的二进制数,6对应于小数部分的二进制数gradedb99dup(7dup(0))average_grade_bufferdb2dup(0);第一个存整数部分(二进制形式),第二个存小数部分(二进制形式)n0db0;各分数段人数存储区(二进制形式)n1db0n2db0n3db0n4db0DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:;此处输入代码段代码MOVAX,DATASMOVDS,AXmovsi,0;指向每个学生信息movdi,0;指向每个学生成绩movcx,100;初始化学生数movdx,offsetstudent_num;请求输入学生总数movah,09int21hcallstore_student_num;存储学生总数,结果送cx中cmpcx,0;输入为0退出jleOutToDOScmpcx,100;学生数超出本程序范围,退出jgeOutToDOSinput:movdx,offsetstudent_information;请求输入学生信息movah,09int21hcallstore_student_information;存储学生信息addsi,20;指向下一个学生信息movdx,offsetstudent_grade;请求输入学生成绩movah,09int21hcallstore_student_grade;存储每个学生成绩adddi,7;指向下一个学生loopinput;循环,直到输入所有学生成绩callsort;排序callfind_result;显示平均成绩和分段人数calldisplay;显示排序结果OutToDOS:movah,1;任意键结束int21hmovax,4c00h;返回DOSint21h;##########存储学生数目的函数store_student_numproc;调用之后,cx中存储了学生数(二进制)pushaxpushbxmovbx,0s1:movah,1int21hcmpal,0dh;是否为回车jes2andal,0fh;转换为非压缩的BCD码movnumber[bx],alincbxjmps1s2:cmpbx,2jgs5;大于2jzs3;等于2;小于2moval,numberjmps4s3:movah,numbermoval,number+1aad;BCD码转换为二进制数s4:movnumber+2,almovcx,0movcl,number+2s5:popbxpopaxretstore_student_numendp;##########存储学生信息的函数store_student_informationprocpushaxpushbxpushdxmoval,18movinformation[si],alleadx,information[si]movah,0ahint21hmovbl,information[si+1];实际输入的字符个数moval,''movinformation[si+bx+2],al;将回车换成''movinformation[si+19],'$';将每个存储单元的最后一个字节置为'$'以便输出popdxpopbxpopaxretstore_student_informationendp;##########存储学生成绩的函数store_student_gradeprocpushaxpushbxpushcxpushdxmovbx,0movcx,0movdx,dideal0:movah,1int21hcmpal,0dh;判断是否为回车jzdeal2;是回车cmpal,'.';是否为小数点jnzdeal1;不是小数点movbx,cx;bx指向小数点处incbx;标记小数点字符出现在第几个位置deal1:pushbxmovbx,dxmovgrade[bx],alpopbxinccx;记录输入字符的个数incdxjmpdeal0deal2:cmpbx,0jnzdeal3;有小数点;无小数点cmpcx,3jggout;大于100jzdeal4;等于100;小于100cmpcx,2jzdeal5;输入数目为2位数
本文标题:北邮汇编语言实验报告
链接地址:https://www.777doc.com/doc-5204978 .html