资源描述:
《山东大学汇编语言上机实验——实验五》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、子程序设计2.6显示学生名次表rank编制一个程序,要求接受键盘输入的一个班的学生成绩,并存放于一个50字的grade数组中,其中grade+i保存学号为I+1的学生成绩。然后根据grade中的学生成绩,把学生成绩依次填入50字的rank数组中,其中rank+i的内容是学号为i+1的学生的名次。再按学号顺序把名次从终端上显示出来。本题要做的主要工作和例2.2的内容是完全一样的,只是增加了由用户键入学生成绩及输出学生名次两个部分的内容,因此这三个部分可以用子程序结构来完成。子程序结构划分的层次图如图2.17所示,可以看出,mai
2、n为主要模块,其下一层的三个模块为程序的三大部分。现将各模块说明如下:1.模块名:main为总模块输入:从键盘输入一个班的学生成绩输出:显示一个班的学生成绩功能:根据输入的学生成绩,计算并显示学生名次。算法如下:一个学生名次等于成绩高于该学生的人数+1.2.模块名:input输入:以学号为序型键盘输入一个班的学生成绩。各个成绩之间用逗号隔开,最后以回车符号结束。输出:把一个班的学生成绩存入grade数组。功能:接受一个班的学生成绩。调用子模块decibin把键盘输入的一个十进制数转换为二进制数。调用子模块crlf完成回车,换行
3、功能。3.模块名:rankp输入:从grade数组取得一个班的学生成绩。输出:以学号为序计算出该班每个学生的名次存入rank数组。功能:计算一个班的学生成绩。算法为:一个学生的名次等于成绩高于该生的学生人数加1.4,。模块名;output输入:把rank数组取得一个班的学生名次。输出:把一个班的学生名次以学号为序在总端上显示出来。功能:先是一个班的学生名次。调用子模块decibin把键盘输入的一个十进制数转换为二进制数。调用子模块crlf完成回车,换行功能。5:模块名:decilin输入:从键盘输入一个十进制数。输出:把该数转
4、换成二进制数并存入BX寄存器中。功能:从键盘输入一个十进制数转换成二进制数并存入BX寄存器中。6.模块名:crlf输出:向终端发出回车换行符。功能:完成一次回车换行操作。7.模块名:binidec输入:从BX寄存器取得一个二进制数。输出:在终端屏幕显示一个十进制数。功能:把BX寄存器中的二进制数转换为十进制数,并在终端显示出来。调用子模块DCE_DIV用来作除法运算并显示字符。8.模块名:dec_div输入:从BX寄存器中的二进制数除以相应的十的幂,并在屏幕显示一位商。余数保存在BX寄存器中。有了以上的层次图及模块说明,对程序
5、的全貌有了基本了解。在图2.18中,我们给出了除rankp以外的其余各个子程序的程序框图。Rankp的框图与图2.4相同。图2.19是程序清单,图2.20是本例的运行情况。;PROGRAMTITLEGOESHERE——Rank;**************************************************************************datareasegmentgradedw50dup(?)rankdw50dup(?)countdw?mess1db'Grade?$'mess2db13,1
6、0,'InputError!',13,10,'$'mess3db'Rank:$'datareaends;**************************************************************************prognamsegment;--------------------------------------------------------------------------mainprocfarassumecs:prognam,ds:datareastart:;setups
7、tackforreturnpushdssubax,axpushax;setDSregistertocurrentdatasegmentmovax,datareamovds,ax;MAINPARTOFPROGRAMGOESHEREcallinputcallrankpcalloutputretmainendp;--------------------------------------------------------------------------inputprocnearleadx,mess1movah,09int21h
8、;movsi,0movcount,0enter:calldecibininccountcmpdl,','jestorecmpdl,13jeexit2jneerrorstore:movgrade[si],bxaddsi,2jmpentererror:leadx,mess2mov