《汇编语言》课程综合性实验报告开课实验室:年月日实验题目显示学生名次表一、实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序和程序编程方法,巩固提高汇编语言程序设计能力应用水平。二、设备与环境PC兼容机、Windows操作系统、汇编程序masm611三、实验内容编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字节的GRADE数组中,其中GRADE+N保存学号N+1的学生成绩。然后根据GRADE中的学生成绩,把学生名次填入50字节的RANK数组中,其中RANK+N的内容是学号为N+1学生的名次。再按学号把学生顺序把学生名次显示出来四、实验结果及分析(包括①已完成什么功能,②如何实现的、遇到的问题和解决办法、流程图和关键代码解释,③收获和体会等)(1)完成的功能:动态输入学生学号和成绩,对学生成绩进行排序并设置名次,再按学号把学生成绩和名次显示出来。(2)实现办法:充分运用宏汇编实现回车换行、数据的输入和输出,使用过程定义伪操作实现排名次和学生学号、成绩和名次的显示。(3)流程图:YN开始调用input子程序输入学号和成绩是否继续输入第1页(4)关键代码:1、数据段定义:DATASSEGMENTndb0mcdb50dup(0)cjdb50dup(?)xhdb50dup(?)m1db13,10,'PleaseinputtheID:',13,10,'$'m2db13,10,'Pleaseinputthemark:',13,10,'$'m3db13,10,'Doyouwanttocontinue?,y/n',13,10,'$'s1db13,10,'**********************************',13,10,'$'s2db13,10,'IDmarkrank',13,10,'$'konggedb'','$'DATASENDS2、数据输入、输出宏定义:shurumacromovah,1int21hsubal,30hcbwmovbl,10mulblmovdl,almovah,1int21hsubal,30hadddl,alendm调用rank子程序成绩排序并设置名次调用print子程序按学号显示成绩和名次结束第2页shuchumacronummoval,numcbwmovbl,10divblmovbl,ahmovdl,aladddl,30hmovah,2int21hmovdl,bladddl,30hmovah,2int21hendm3、排序并设置名次:rankprocnearmovah,0moval,1movsi,0movcl,nmovch,0movdl,99movbh,0e1:pushcxe2:movbl,cj[si]cmpbl,dljnee4addmc[si],aladdbh,1cmpbh,1jee6jmpe4e3:subal,1e4:addsi,1loope2cmpbh,0jnee5popcxmovbh,0subdl,1cmpdl,-1movsi,0jee7jmpe1e5:popax第3页popcxmovbh,0subdl,1cmpdl,-1movsi,0jee7jmpe1e6:addal,1pushaxjmpe3e7:retrankendp4、按学号显示成绩和名次:printprocnearoutputs1outputs2movcl,nmovch,0movsi,0exit:shuchuxh[si]outputkonggeshuchucj[si]outputkonggeshuchumc[si]crlfaddsi,1loopexitretprintendp(5)运行结果截图:第4页(6)收获和体会:大一学习的是C语言,因此,在学汇编语言之初,面对格式之类的感觉很不适应。C语言用的是一个又一个变量,而汇编语言则是利用一个又一个寄存器来实现。而写代码的时候,经常会因为一些符号,或者字长的失误,完全是无心之失而导致程序无法执行。而回过来找错误的时候,又往往忽略了这些细节而找不到错误的根源。学习汇编是个艰辛的过程,从C语言到汇编的不适,到牢记大量的指令,并熟练应用,都要花费很多时间适应。对有些指令的源操作数和目的操作数,以及操作结果的存放位置都要熟记于心。否则,你将很难应用这些指令,学习汇编的一个重要能力就是能够熟练调试所写程序,当某个程序不能执行时,而又发现不了错误,这就要对程序进行逐步调试了。这样更容易发现错误点并牢记。教师评价评定项目ABCD评定项目ABCD算法正确操作熟练程序结构合理实验结果正确语法、语义正确文字流畅、报告规范其他:评价教师签名:年月日第5页附代码:crlfmacromovah,2movdl,10int21hmovah,2movdl,13int21hendmoutputmacrostringmovdx,offsetstringmovah,9int21hendmshurumacromovah,1int21hsubal,30hcbwmovbl,10mulblmovdl,almovah,1int21hsubal,30hadddl,alendmshuchumacronummoval,numcbwmovbl,10divblmovbl,ahmovdl,aladddl,30hmovah,2int21hmovdl,bladddl,30hmovah,2int21hendm第6页DATASSEGMENTndb0mcdb50dup(0)cjdb50dup(?)xhdb50dup(?)m1db13,10,'PleaseinputtheID:',13,10,'$'m2db13,10,'Pleaseinputthemark:',13,10,'$'m3db13,10,'Doyouwanttocontinue?,y/n',13,10,'$'s1db13,10,'**********************************',13,10,'$'s2db13,10,'IDmarkrank',13,10,'$'konggedb'','$'DATASENDSSTACKSSEGMENTSTACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXagain:callinputaddn,1outputm3movah,1int21hcmpal,'y'jeagaincallrankcallprintMOVAH,4CHINT21Hinputprocnearoutputm1shurumovbl,nmovbh,0movxh[bx],dloutputm2shurumovbl,nmovbh,0movcj[bx],dl第7页retinputendprankprocnearmovah,0moval,1movsi,0movcl,nmovch,0movdl,99movbh,0e1:pushcxe2:movbl,cj[si]cmpbl,dljnee4addmc[si],aladdbh,1cmpbh,1jee6jmpe4e3:subal,1e4:addsi,1loope2cmpbh,0jnee5popcxmovbh,0subdl,1cmpdl,-1movsi,0jee7jmpe1e5:popaxpopcxmovbh,0subdl,1cmpdl,-1movsi,0jee7jmpe1e6:addal,1pushaxjmpe3e7:ret第8页rankendpprintprocnearoutputs1outputs2movcl,nmovch,0movsi,0exit:shuchuxh[si]outputkonggeshuchucj[si]outputkonggeshuchumc[si]crlfaddsi,1loopexitretprintendpCODESENDSENDSTART