汇编语言程序设计期末大作业:编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,(1)将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;(2)按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;(3)输出总分高于班平均总分的全部学生记录。要求:元月4日前提交一份纸质报告(班长统一收齐)。大作业格式:1.标题:汇编语言程序设计期末大作业2.作业题目:(上述)3.算法分析(流程图)4.实现代码(必须含注释)5.实验结果(汇编、连接、运行的截图)6.总结代码实现studentstruct;定义结构Snumberdb11,0,11dup(?)Snamedb11,0,11dup(?)Englishdb4,0,4dup(?)Chinesedb4,0,4dup(?)Mathdb4,0,4dup(?)Sumdb4,0,4dup(?)studentends;数据段datasegmentmessMenudb'----------------TheHomeworkofAssembler-----------------$'messMenu1db'----------Name:TULINNo:8000110028--------------$'messNextdb'--------------------------------------------------------------------------------$'messNamedb'Pleaseinputthestudentname(11):$'messNumdb'Pleaseinputthestudentnumber(11):$'messEnglishdb'PleaseinputtheEnglishscore:$'messChinesedb'PleaseinputtheChinesescore:$'messMathdb'PleaseinputtheMathscore:$'mess1db'name:$'mess2db'number:$'mess3db'English:$'mess4db'Chinese:$'mess5db'Math:$'messSumScoredb'SumScore:$'MessTabdb09,'$';Tab用于排列对齐StudAddressdw10dup(?);存各学生的偏移地址EnglishScoredb10dup(?);存学生英语成绩的十进制数ChineseScoredb10dup(?);存学生语文成绩的十进制数MathScoredb10dup(?);存学生数学成绩的十进制数Averagedw?Bufdb6dup(?)SumScoredw10dup(?);用于记录每个学生总分NumbersOfStudentdb0Stustudent10dup()SumRankdb0,1,2,3,4,5,6,7,8,9FNamedb'C:\StuScore.dat',0;文件FileHandledw?;文件句柄EndOfFiledw0ffhOtherLinedb0ah,0dh,'$'FileSpacedbdataends;堆栈段stacksegmentdb100hdup(?)stackends;代码段codesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,ax;将数据段首地址传给dsmovax,stackmovss,ax;将堆栈段首地址传给ssmovsp,0callEndlineleadx,messMenumovah,09hint21hcallEndlineleadx,messMenu1movah,09hint21hcallEndlineleasi,Stu;取student的首地址给simovcx,10InputStu:callGetStudentleadx,messNextmovah,09hint21haddsi,50loopInputStu;输出循环结束leasi,StucallGetEnglishScorecallGetChineseScorecallGetMathScorecallStop;程序运行停止一下,按回车键继续执行callWritetofilecallstopcallSumAveragecallGetSumcallGetAddresscallSortStudentcallStop;程序运行暂停一下,按回车键,继续执行callShowStumovah,4chint21h;============================================================;子程序名:GetStudent;功能:录入学生信息;============================================================GetStudentprocnearpushsipushdxpushaxpushcx;子程序保护现场leadx,messNamemovah,9int21hleadx,[si].Snamemovah,0Ahint21hcallEndlineleadx,messNummovah,9int21hleadx,[si].Snumbermovah,0Ahint21hcallEndlineleadx,messEnglishmovah,9int21hleadx,[si].Englishmovah,0Ahint21hcallEndlineleadx,messChinesemovah,9int21hleadx,[si].Chinesemovah,0Ahint21hcallEndlineleadx,messMathmovah,9int21hleadx,[si].Mathmovah,0Ahint21hcallEndlinepopcxpopaxpopdxpopsiretGetStudentendp;============================================================;子程序名:TureShow;功能辅助子程序ShowStu,用于输出字符串;============================================================TureShowprocnearpushdx;保护相关寄存器pushcxpushbxpushaxmovbx,dx;将bx指向缓存区的地址xorcx,cxmovcl,[bx+1];cl存放了缓存区录入的字符数LoopTS:movdl,[bx+2];从第三个偏移地址开始显示movah,2;调用单个字符输出中断int21hincbxloopLoopTSpopaxpopbxpopcxpopdxretTureShowendp;============================================================;子程序名:ShowStu;功能:显示学生信息记录;============================================================ShowStuprocnearpushcxpushaxpushdxpushsipushdi;保护现场callEndlineleadi,SumScoreleabx,StudAddressmovcx,10Loop1:movsi,wordptr[bx]leadx,mess1movah,09hint21hleadx,[si].SnamecallTureShowcallMessTb;输出1个Tab用于排序对齐leadx,mess2movah,09hint21hleadx,[si].SnumbercallTureShowcallMessTb;输出1个Tab用于排序对齐leadx,mess3movah,09hint21hleadx,[si].EnglishcallTureShowcallMessTb;输出1个Tab用于排序对齐leadx,mess4movah,09hint21hleadx,[si].ChinesecallTureShowcallMessTb;输出1个Tab用于排序对齐leadx,mess5movah,09hint21hleadx,[si].MathcallTureShowcallMessTb;输出1个Tab用于排序对齐leadx,messSumScoremovah,09hint21hmovax,[di]callOutputcallEndlineaddbx,2adddi,2loopLoop1leadx,messNextmovah,09hint21hpopdipopsipopdxpopaxpopcxretShowStuendp;=============================================================;子程序名:Endline;功能:回车换行;=============================================================Endlineprocnearpushax;保护相关寄存器pushdxpushcxmovah,2;回车movdl,0ahint21hmovah,2;换行movdl,0dhint21hpopcxpopdxpopaxretEndlineendp;=============================================================;子程序名GetEnglishScores:;功能:将得到的指定个学生的分数以十进制保存到EnglishScore缓冲区中;=============================================================GetEnglishScoreprocnearpushdi;保护相关寄存器pushsipushdxpushcxpushbxpushaxpushbpleasi,Stu;使si指向第一个学生的偏移地leabp,EnglishScore;使bp指向以十进制存学生分数的地址movcx,10;共有指定个学生LoopScores0:pushcx;保护外循环的CX值leabx,[si].English;使bx指向学生字符分数缓冲区xordi,dixorcx,cxmovcl,[bx+1];学生字符分数缓冲区的字符数即使循环次数LoopScore0:moval,[bx+2];从第三个偏移地址开始subal,30h;得到一个十进制值xorah,ahxchgax,di;使其暂存到di,且将高位di的值乘10pushsi;保护寄存器的原值pushdxmovsi,10mulsi;将si乘10,乘积低位保存在axpopdxpopsixchgax,di;将原来di中低位的值与高位的值ax交换回来adddi,ax;至此又录入一位十进制数incbxloopLoopScore0movax,dimovds:[bp],al;将得到的十进制分数存入保存十进制分数缓冲区EnglishScore中addsi,50;使di指向下一个学生的偏移地址incbp;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数popcx;弹出外循环的CX值loopLoopScores0popbppopaxpopbxpopcxpopdxpopsipopdiretGetEnglishScoreendp;=============================================================;子程序名GetChineseScore:;功能:将得到的指定个学生的分数以十进制保存到Chinese