实验报告实验名称:实验五子程序设计(显示学生名次表rank)课程名称:微机实验院系部:电气与电子工程学院专业班级:电网1101学生姓名:万雪婷学号:1111600120同组人:实验台号:指导教师:成绩:实验日期:华北电力大学(北京)一、实验目的及要求:1.通过调试程序,观察子程序调用及嵌套过程,进一步理解CALL指令和RET指令的功能。2.掌握子程序(或过程)调用时参数传递的方法。3.进一步学习数组的使用方法。二、仪器用具:仪器名称规格/型号数量备注清华单片机实验箱51/96系列1微机联想1TMSD开发调试软件1三、实验原理编制一个程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字的grade数组中,其中grade+I保存学号为i+1的学生的成绩。然后根据grade中的学生成绩,把学生名次填入50字的rank数组中,其中rank+1的内容是学号为i+1学生的名次。再按学号顺序把名次从显示器上显示出来。四、实验步骤五、讨论与结论六、实验原始数据程序清单:datareasegment;数据段gradedw50dup(?)rankdw50dup(?)countdw?mess1db'Grade?$'mess2db13,10,'InputError!',13,10,'$'mess3db'Rank:$'datareaendsprognamsegmentmainprocfar;main函数,计算并显示学生的名次assumecs:prognam,ds:datareastart:pushdssubax,axpushaxmovax,datareamovds,axmovax,datareamovds,axcallinputcallrankpcalloutputretmainendpinputprocnear;接受一个班的成绩leadx,mess1movah,09int21hmovsi,0movcount,0enter:calldecibininccountcmpdl,','jestorecmpdl,13jeexit2jneerrorstore:movgrade[si],bxaddsi,2jmpentererror:leadx,mess2movah,09int21hexit2:movgrade[si],bxcallcrlfretinputendprankpprocnear;计算一个班的学生名次movdi,countmovbx,0loopl:movax,grade[bx]movwordptrrank[bx],0movcx,countleasi,gradenext:cmpax,[si]jgno_countincwordptrrank[bx]no_count:addsi,2loopnextaddbx,2decdijnelooplretrankpendpoutprocnear;显示一个班的学生的名次leadx,mess3movah,09int21hmovsi,0movdi,countnext1:movbx,rank[si]callbinidecmovdl,','movah,02int21haddsi,2decdijnznext1callcrlfretoutputendpdecibinprocnear;将十进制转化为二进制,并保存在BX中newchar:movah,1int21hmovdl,alsubal,30hjlexit1cmpal,9djgexit1cbwxchgax,bxmovcx,10dmulcxxchgax,bxaddbx,axjmpnewcharexit1:retdecibinendpbinidecprocnear;将二进制转换为十进制,并输出pushbxpushcxpushsipushdimovcx,100dcalldec_divmovcx,10dcalldec_divmovcx,ldcalldec_divpopdipopsipopcxpopbxretbinidecendpdec_divprocnear;把BX寄存器中的二进制数除以相movax,bx;应的十的幂,并在屏幕上显示一位movdx,0;上。余数保存在BX寄存器中。divcxmovbx,dxmovdl,aladddl,30hmovah,02hint21hretdec_divendpcrlfprocnearmovdl,0ahmovah,02hint21hretcrlfendpprognamendsendstart指导教师签字:年月日