首页 北邮汇编语言实验报告

北邮汇编语言实验报告

举报
开通vip

北邮汇编语言实验报告微机原理汇编实验一专业计算机科学与技术班级学生学号目录实验要求...................................................................3实验设计...................................................................31.分析及算法思想...................................................................32.数据结构.........

北邮汇编语言实验报告
微机原理汇编实验一专业计算机科学与技术班级学生学号目录实验要求...................................................................3实验设计...................................................................31.分析及算法思想...................................................................32.数据结构...............................................................................33.子程序...................................................................................44.流程图...................................................................................4三、运行实例..................................................................6四、实验总结..................................................................6五、附页(源代码).......................................................7一、实验要求:一个学生的信息包括姓名、班级、学号(班内序号)、成绩。试编写程序实现以下功能:(1)能录入学生成绩(十进制形式);提示:输入形如:tom3011695回车,每名学生用一行,选择一个特殊符表示输入结束;(2)能按要求:如学号或成绩进行排序显示;(3)能统计平均成绩;(4)能统计不及格、60-70、70-80、80-90、90-100各分数段的人数。实验设计:1.分析及算法思想:(1)采用数组进行数据存储:学生数目信息数组(存储学生数目),学生信息数组(按班级-学号-姓名 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 存储),平均成绩数组。五个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)说明:和成绩数组原理一样排序:(按成绩分布排序)(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位数;个位数deal6:;处理个位数moval,grade[di]subal,'0'movgrade[di+5],aljmpgoutdeal5:;处理2位数movah,grade[di]andah,0fhmoval,grade[di+1]andal,0fhaadmovgrade[di+5],aljmpgoutdeal4:;处理3位数moval,100movgrade[di+5],aljmpgoutdeal3:;处理带有小数部分的成绩moval,grade[di+bx];将小数部分处理subal,'0'movgrade[di+6],alcmpbx,4jzdeal4;'.'出现在输入字符的第四位,则输入的整数部分为3位数jggout;整数部分大于3位数cmpbx,3jzdeal5;'.'出现在输入字符的第三位,则输入的整数部分为2位数jmpdeal6;否则为个位数gout:popdxpopcxpopbxpopaxretstore_student_gradeendp;##########排序学生成绩的函数sortprocpushaxpushbxpushcxpushdxpushsipushdimovdx,0movdl,number+2Loop1:;使用冒泡排序法movcx,dxmovdi,0movsi,0Loop2:;先比整数部分,再比小数部分moval,grade[di+5]cmpal,grade[di+12]jgnext;大于,向下个移动jlswap1;小于,交换成绩,名字;等于,比较小数部分moval,grade[di+6]cmpal,grade[di+13]jgenext;大于或等于,向下个移动jlswap1;小于,交换成绩,名字swap1:movbx,siswap11:;交换学生信息moval,information[bx+2]xchgal,information[bx+22]movinformation[bx+2],alincbxcmpal,'$'jnzswap11pushbxmovbx,0swap2:;交换学生成绩moval,grade[di+bx]xchgal,grade[di+bx+7]movgrade[di+bx],alincbxcmpbx,7jnzswap2popbxnext:addsi,20adddi,7deccxjnzLoop2decdxjnzLoop1popdipopsipopdxpopcxpopbxpopaxretsortendp;##########显示最后结果的函数find_resultprocpushaxpushbxpushcxpushdxpushsipushdimovbx,0movcx,0movcl,number+2;cl中保存学生人数movdi,0movsi,0F1:moval,grade[di+5]cmpal,100jgFout;大于100jzF90;等于100;小于100cmpal,90jgeF90;大于等于90;小于90cmpal,80jgeF80;大于等于80;小于80cmpal,70jgeF70;大于等于70;小于70cmpal,60jgeF60;大于等于60;小于60;处理<60movdl,n4incdlmovn4,dlFnext:;处理平均成绩处理方式:整数部分*10+小数部分*10,结果先除以学生人数,再输出(输出整数时除以10)moval,grade[di+5]movdl,10muldlmovdl,grade[di+6]movdh,0addax,dxaddbx,axjmpF2F90:;处理>=90movdl,n0incdlmovn0,dljmpFnextF80:;处理大于等于80小于90movdl,n1incdlmovn1,dljmpFnextF70:;处理大于等于70小于80movdl,n2incdlmovn2,dljmpFnextF60:;处理大于等于60小于70movdl,n3incdlmovn3,dljmpFnextF2:adddi,7deccxjnzF1;处理所有学生movdx,offsetkaishishuchu;打印一段************movah,09int21hmovdx,offsetaverage_grade;打印平均成绩movah,09int21hmovax,bxmovdx,0movcx,0movcl,number+2divcxmovcl,10divclcallshow;先打印平均成绩的整数部分pushaxmovdl,'.';打印'.'movah,2int21hpopaxmoval,ahcallshow;再打印平均成绩的小数部分movdx,offsetresult1;输出大于等于90的人数movah,09int21hmoval,n0callshowmovdx,offsetresult2;输出大于等于80并小于90的人数movah,09int21hmoval,n1callshowmovdx,offsetresult3;输出大于等于70并小于80的人数movah,09int21hmoval,n2callshowmovdx,offsetresult4;输出大于等于60并小于70的人数movah,09int21hmoval,n3callshowmovdx,offsetresult5;输出小于60的人数movah,09int21hmoval,n4callshowFout:popdipopsipopdxpopcxpopbxpopaxretfind_resultendp;##########输出分数排序的函数displayprocpushaxpushbxpushcxpushdxpushsipushdimovdx,offsetgrade_rankmovah,09int21hmovcx,0movcl,number+2;cl中保存学生人数movdi,0movsi,0D1:leadx,offsetinformationadddx,siadddx,2movah,09int21hmovdx,offsetblank;打印一段空白movah,09int21hmovgrade[di+5],'$';将保存成绩的单元中第6个字节置为'$',便于输出movdx,offsetgrade;输出成绩adddx,dimovah,09int21hmovdx,offsethuanhang;打印换行movah,09int21haddsi,20adddi,7deccxjnzD1;直至将所有成绩都输出popdipopsipopdxpopcxpopbxpopaxretdisplayendp;##########将二进制数(不大于127的十进制整数)输出的函数showprocpushaxpushdxpushcxpushbxmovcl,100movah,0divcl;将al中的二进制数除以100movbx,ax;保存余数cmpal,0jzx1;如果商为0,则表示原数小于100;否则将百位数打印出来movdl,aladddl,30hmovah,2int21hx1:moval,bhmovah,0movcl,10divcl;将al中的二进制数除以10movbx,ax;保存余数cmpal,0jzx2;如果商为0,则表示原数小于10;否则将十位打印出来movdl,aladddl,30hmovah,2int21hx2:;打印个位movdl,bhadddl,30hmovah,2int21hpopbxpopcxpopdxpopaxretshowendp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;子程序结束CODESENDSENDSTART;#######################################################代码段结束
本文档为【北邮汇编语言实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
慢慢老师
暂无简介~
格式:doc
大小:62KB
软件:Word
页数:0
分类:
上传时间:2021-08-21
浏览量:1