汇编语言程序设计期末大作业:编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,(1)将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;(2)按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;(3)输出总分高于班平均总分的全部学生记录。stacksegmentstackdb200dup(0)stackendsDATASEGMENTPARA'DATA'menuDB'*******************************',0dh,0ah;主菜单列表DB'*mainmenu*',0dh,0ahDB'**',0dh,0ahDB'*1.outputallstudentscore*',0dh,0ah;输出所有学生的成绩DB'*2.statisticsscore(ABCED)*',0dh,0ah;显示每个成绩段的学生人数DB'*3.sortscore*',0dh,0ah;学生成绩的排序DB'*4.intputfivenamesandscores*',0dh,0ah;任意添加五个学生的姓名与成绩DB'*5.intputonenameandscore*',0dh,0ah;任意输入一个学生的姓名与成绩,会显示出其成绩的等级DB'*6.clearscreen*',0dh,0ah;清屏DB'*7.exit*',0dh,0ah;退出DB'************************',0dh,0ahPlaseDB'plasechoose:(1-7):',0dh,'$';选择1-7errdb'thedataerror$'put0db'plaseintputonenameandscore',0dh,'$'putdb'plaseintputfivenamesandscores',0dh,'$'byedb'***************thankyoutouse*********************',0dh,'$'scoredw64,71,66,61,78,80,83,89,79,96n1=($-score)/2;score的长度scoreaddDB3;增加的分数存入指定单元DB?DB3DUP(0)db'$'scoreadd2DB3;增加的分数存入指定单元DB?DB3DUP(0)db'$'scoreadd3DB3;增加的分数存入指定单元DB?DB3DUP(0)db'$'scoreadd4DB3;增加的分数存入指定单元DB?DB3DUP(0)db'$'scoreadd5DB3;增加的分数存入指定单元DB?DB3DUP(0)db'$'score1db15dup(0)mes1DB'THENUMBEROFE(0---59):$';显示E等级的人数的界面,对应V1mes2DB'THENUMBEROFD(60--69):$';显示D等级的人数的界面,对应V2mes3DB'THENUMBEROFC(70--79):$';显示C等级的人数的界面,对应V3mes4DB'THENUMBEROFB(80--89):$';显示B等级的人数的界面,对应V4mes5DB'THENUMBEROFA(90-100):$';显示A等级的人数的界面,对应V5mes6DB'$';12字节空格使显示分数及对应名字相隔mes7db'name:score:',0ah,0dh,'$'mes8db'name:',0ah,0dh,'$';提示输入姓名mes9db'score:',0ah,0dh,'$';提示输入分数bo1DB'youinputthescoreofstudentisA$';判断输入的数据的等级后显示对应级别Abo2DB'youinputthescoreofstudentisB$';判断输入的数据的等级后显示对应级别Bbo3DB'youinputthescoreofstudentisC$';判断输入的数据的等级后显示对应级别Cbo4DB'youinputthescoreofstudentisD$';判断输入的数据的等级后显示对应级别Dbo5DB'youinputthescoreofstudentisE$';判断输入的数据的等级后显示对应级别Ebo6DB'1.outputallstudentscore2.statisticsscore(ABCED)'DB'3.sortscore4.intputfivenamesandscores'DB'5.intputonenameandscore6.clearscreen7.exit',0dh,'$';清屏后提示v1db?;0---59段人数计数器v2db?;60--69段人数计数器v3db?;70--79段人数计数器v4db?;80--89段人数计数器v5db?;90-100段人数计数器nam1DB'chenbo$';学生姓名已存入指定数据存储单元NAM(1-10)nam2DB'chenhin$'nam3DB'chenhun$'nam4DB'huanwei$'nam5DB'tanghui$'nam6DB'chenfan$'nam7DB'maoyun$'nam8DB'zhanjun$'nam9DB'zhanhua$'nam10DB'chenlin$'nam11DB8;增加的名字存入指定单元DB?DB8DUP(0)nam12DB8DB?DB8DUP(0)nam13DB8DB?DB8DUP(0)nam14DB8DB?DB8DUP(0)nam15DB8DB?DB8DUP(0);NUMDB21,22,23,24,25,26,27,28,29,30;***********显示***************showmacromleadx,mmovah,9int21hendm;***********输入******************inputmacrofleadx,fmovah,10int21HendmDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTARTPROCMOVAX,DATAmovds,AXshowmenuchen:showplasemovah,1;选择菜单项int21hcalladcmpal,'7'jaerror;当输入非法数据时,报错cmpAL,'1'jberror;当输入非法数据时,报错CMPAL,'1'JEone;当输入1时,转入分支程序,实现输出分数及名字功能CMPAL,'2'JEtwo;当输入2时,转入TWO分支程序,实现统计功能CMPAL,'3'JEthree;当输入3时,转入THREE分支程序,实现排序功能cmpAL,'4'JEfo;当输入4时,转入FO分支程序,实现键盘输入功能及输出cmpAL,'5'jefiv;当输入5时,转入FO分支程序,实现键盘输入功能能及等级判断cmpal,'6'jesix;当输入6时,转入SIX分支程序,实现清屏CMPAL,'7'jmpbyebye;当输入7时,转入BYEBYE分支程序,退出error:;分支程序,当输入非法数据时,报错showerrcalladjmpchenquit:;分支程序,退出movah,4chint21hbyebye:showbyejmpquit;********************1显示所有成绩**************one:;ONE分支程序,实现输出分数及名字功能movcx,n1leadi,scoreshowmes7movbp,offsetnam1chen1:;*********以下显示姓名**************movdx,bpmovah,9int21haddbp,8showmes6;*********以下显示分数**************movax,[di]movbx,10leasi,score1callradixmov[si],byteptr0dhmov[si+1],byteptr0ahmov[si+2],byteptr'$'leadx,score1movah,9int21h;以上是2-10进制转换及显示adddi,2;*********以上显示分数**************deccxjnzchen1jmpchen;***********2-10***************radixproc;2-10进制转换pushcx;(cx)=10pushdx;movcx,0;P进制入站时的计数器L1:MOVDX,0DIVBX;商置ax,pushdx;inccxorax,axjneL1l2:popax;出栈cmpal,10;比较jbnext;跳入下一个addal,7;进行加法运算next:addal,30hmov[si],alincsideccxjnzl2popdx;出栈popcx;出栈retradixendp;*****************2号统计各分段人数******************two:leasi,scoremovcx,n1callcount;统计各分段人数calladjmpchen;********************3号顺序分数排序***************three:leabx,scoremovcx,n1callsort;排序并存放在score为首址的单元中;************显示所有成绩************movcx,n1leadi,scorechen2:;***********冒泡排序子程序***************sortproc;P128排序pushax;入栈pushdx;入栈pushsi;入栈pushdi;入栈movdx,cxsubdx,2movsi,2lopi:movax,[di]movbx,10leasi,score1callradixmov[si],byteptr0dhmov[si+1],byteptr0ahmov[si+2],byteptr'$'leadx,score1movah,9int21h;以上是2-10进制转换及显示adddi,2deccxjnzchen2jmpchenmovdi,siadddi,2movax,[bx+si-2]lopj:cmpax,[bx+di-2]jbelopkxchg[bx+di-2],axmov[bx+si-2],axlopk:showmes8;显示信息inputnam12calladshowmes9;显示信息inputscoreadd2callad;调动程序showmes8;显示信息inputnam13callad;调动程序showmes9;显示信息inputscoreadd3callad;调动程序adddi,2cmpdi,20jbelopjaddsi,2cmpsi,18;比较jbelopipopdipopsi;出栈popdx;出栈popax;出栈ret;返回sortendp;******************4输出输入成绩*******************fo:showput;显示calladshowmes8;显示信息inputnam11;输入姓名calladshowmes9;显示信息inputscoreadd;输入callad;调动程序showmes8inputnam14calladshowmes9inputscoreadd4callad;**************显示对应名字分数************showmes7;显示对应名字分数;calladshownam11+2;显示nameshowmes6showscoreadd+2;显示scorecalladshownam12+2;显示nameshowmes6showscoreadd2+2;显示scorecalladshownam13+2;显示nameshowmes6showscoreadd3+2;显示scorecalladshownam14+2;