您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北邮微机原理汇编实验
电子工程学院微机原理汇编语言上机实验报告班级:学号:姓名:班内序号:一、实验要求一个学生的信息包括姓名、班级、学号(班内序号)、成绩。试编写程序(1)能录入学生成绩(十进制形式);提示:输入形如:tom3011695(2(3(4)能统计不及格、60-70、70-80、80-90、90-100各分数段的人数。二、程序流程和算法思想(一).程序流程设计根据本次实验要求要求实现的5个功能:信息录入、按学号排序、按成绩排序、求平均成绩、求各个分数段人数,在加上一个退出程序,总体上可以将整个程序划分为七个部分,依次为功能选择部分(六个选项)、信息录入部分、按学号排序部分、按成绩排序部分、求平均成绩部分、求各个分数段部分、退出程序部分。根据以上的划分,画出流程图如下:(二).数据结构1、采用数组进行数据存储:(1)学生人数数组stuNumDB0(2)学生信息数组StudentDBmaxNumDUP(14,0,'$','$','$','$','$','$','$','$','$','$','$','$','$','$'),每组数数有0-17共18个字节,0为最大输入,1为实际输入,2-16为学生信息,17为”$”学生信息存储格式为(名称班级学号成绩),例如(liu2071198),(3)平均成绩数组aveScoresDB00H,'$'$654功能选择StartExit求平均成绩统计分数段3按成绩排序21按学号排序信息录入(4)用变量countADB00H,'$'、countBDB00H,'$'、countCDB00H,'$'、countDDB00H,'$'、countEDB00H,'$'分别记录90分以上、89~80分、79~70分、69~60分以及60分以下各分数段人数。2、子程序根据实验要求的功能,程序包含6个子程序(1)FunctionChioce程序功能选择(2)infinput学生信息输入(3)IDbublingSort按学号排序(升序)(4)gradeBublingSort按成绩排序(降序)(5)countAverageScores计算平均分(6)Statistics统计各个分数段人数对于学生按成绩或学号排序,采用冒泡排序,成绩按降序排序,学号按升序排序3、提示信息Pleasechoose选择功能Wrongchoice!Pleasechooseitagain!无此选项,重新选择Pleaseinputstudents’information输入学生信息Result输出结果(按学号排序、按成绩排序、计算平均成绩、统计分数段)60:小于60分人数60~69:60~69分人数70~79:70~79分人数80~89:80~89分人数90~100:90~100分人数三、程序运行截图程序功能选择学生信息输入按学号排序按成绩排序计算平均值统计各个分数段人数错误选择报错,重新输入四、实验总结这次汇编语言上机实验,要求编写一个学生信息录入查询程序,实现成绩录入,按学号排序,按成绩排序,求平均分,统计各个分数段人数的功能。从程序的设计上来说,我学会了自顶向下设计的方式,即根据程序要实现的功能,将程序划分为一个个小的子程序,画出流程图,再进行程序的编写及细化。从对汇编语言语法上来说,这次实验大大地增强了我对汇编语言的掌握程度。这次的实验相对来说比较综合,用到的知识也很多,从最基本的数组和变量的定义,到各种运算符的运用,到各个指令的使用,到较为复杂的程序的总体框架的编写,子程序的定义和调用,宏的定义和调用,数据参数的传递。在整个编写的过程中,我对于汇编语言语法的理解加深了,而且,对于其实现的原理机制的理解也大大增强了。汇编语言并非高级语言,不是面向对象,难度较大,极有可能因为一些小的细节导致程序无法运行,甚至出现不正确的结果,例如入栈和出栈问题等,排查起来相对较为困难。我在这次的实验中也遇到了各种各样的小问题,但在自己细心的检查下以及和同学们的讨论中,这些问题也都一一解决了。这次实验对于提高我的编程思维能力和发现问题,解决问题的能力的效果还是比较明显的。总的来说,这次的实验还是比较完满的,而且是极其有意义的。这对于我以后无论是读研继续深造,还是步入社会工作,都是很有帮助的。五、实验源代码DATASEGMENTmaxNumEQU100;学生的最大人数stuNumDB0;学生人数StudentDBmaxNumDUP(14,0,'$','$','$','$','$','$','$','$','$','$','$','$','$','$');存储学生信息aveScoresDB00H,'$';存储学生平均成绩MSGDBThisisaprogramforstaticstudentsinformation:,0aH,0dH,DB1.Pleaseinputstudent`sinformation(tom3011695)!,0aH,0dH,DB2.SortingbyID!,0aH,0dH,DB3.Sortingbygrade!,0aH,0dH,DB4.Averagestudents`scores!,0aH,0dH,DB5.Statistics!,0aH,0dH,DB0.Exittheprogram!,0aH,0dH,DBPleasechooce:,0aH,0dH,'$';选择功能选项的提示RESULTDBResult:,0aH,0dH,'$'InputMSGDBPleaseinputstudents`information:,0aH,0dH,'$'ERRORDBWrongchoice!Pleasechooceitagain!,0aH,0dH,'$'countEDB00H,'$';0~59分数段学生数countDDB00H,'$';60~69分数段学生数countCDB00H,'$';70~79分数段学生数countBDB00H,'$';80~89分数段学生数countADB00H,'$';90~100分数段学生数lessThan60DB60:,'$'lessThan70DB60~69:,'$'lessThan80DB70~79:,'$'lessThan90DB80~89:,'$'lessThan100DB90~100:,'$'DATAENDSSTACKSEGMENTDB512DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK;NumCount1宏,对变量stuNum进行-1处理NumCount1MACROPUSHAXMOVAL,1SUBstuNum,ALPOPAXPUSHAXMOVAL,[stuNum]CBWMOVCX,AXPOPAXPUSHAXMOVAL,1ADDstuNum,ALPOPAXENDM;NumConut2宏,对变量stuNum赋值处理NumConut2MACROPUSHAXMOVAL,[stuNum]CBWMOVCX,AXPOPAXENDM;Enter宏:回车换行符EnterMACROPUSHAXPUSHDXMOVDL,0DHMOVAH,02HINT21HMOVDL,0AHINT21HPOPDXPOPAXENDM;callkey宏,调用系统服务callkeyMACROPUSHAXMOVAH,09HINT21HPOPAXMOVAH,1INT21HENDM;外层最大循环Circle:MOVAX,DATAMOVDS,AXCALLFunctionChoiceMOVAH,4CHINT21H;FunctionChoice程序功能选择FunctionChoicePROCNEARSTART:LEADX,MSGPUSHAXMOVAH,09HINT21HPOPAXMOVAH,1INT21HEnterCMPAL,'1'JZchooseInput;选择信息输入CMPAL,'2'JZchooseSort1;按学生ID排序CMPAL,'3'JZchooseSort2;按学生成绩排序CMPAL,'4'JZchooseAverageScores;输出学生平均分CMPAL,'5'JZchooseStatistics;统计各个分数段人数CMPAL,'0'JZEXITLEADX,ERRORPUSHAXMOVAH,09HINT21HPOPAXJMPSTARTchooseInput:CALLinfInputJMPSTARTchooseSort1:CALLIDbublingSortJMPSTARTchooseSort2:CALLgradeBublingSortJMPSTARTchooseAverageScores:CALLcountAverageScoresJMPSTARTchooseStatistics:CALLStatisticsJMPSTARTEXIT:RETFunctionChoiceENDP;infInput:学生信息输入infInputPROCNEARPUSHAX;堆栈保护PUSHBXPUSHCXPUSHDXPUSHSIPUSHDIMOVBL,1LEADX,InputMSG;提示信息输出PUSHAXMOVAH,09H;系统功能调用INT21HPOPAXMOVDI,0MOVCX,maxNumStu:LEADX,Student+DI;学生信息地址MOVAH,0AHINT21HMOVSI,DX;比较是否是退出符号'$'cmpBYTEPTR[SI+2],'$'JZconADDstuNum,BLADDDI,16EnterLOOPStucon:POPDIPOPSIPOPDXPOPCXPOPBXPOPAXRETinfInputENDP;序号升序IDbublingSortPROCNEARPUSHAX;堆栈保护PUSHBXPUSHCXPUSHDXPUSHDIPUSHSILEADX,RESULTPUSHAXMOVAH,09HINT21HPOPAXPUSHAXMOVAL,1SUBstuNum,ALPOPAXPUSHAXMOVAL,[stuNum]CBWMOVCX,AXPOPAXPUSHAXMOVAL,1ADDstuNum,ALPOPAXLP1:MOVDI,CXMOVBX,0LP2:MOVAL,[Student+BX+10]CMPAL,[Student+BX+16+10]JBStatisticsIfoJAExchangeIfoMOVAL,[Student+BX+11]CMPAL,[Student+BX+16+11]JBEStatisticsIfoExchangeIfo:;交换学生信息PUSHCXPUSHBXMOVCX,13Stu2:MOVDL,[Student+BX+2]XCHGDL,[Student+BX+16+2]MOV[Student+BX+2],DLINCBXLOOPStu2POPBXPOPCXStatisticsIfo:ADDBX,16LOOPLP2MOVCX,DILOOPLP1Output:MOVCL,stuNumMOVBX,0LP3:MOVCH,13LEASI,Student+BX+2LP4:MOVDX,[SI]MOVAH,02HINT21HINCSIDECCHJNZLP4EnterADDBX,16DECCLJNZLP3POPSIPOPDIPOPDXPOPCXPOPBXPOPAXRETIDbublingSortENDP;成绩降序gradeBublingSortPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHDIPUSHSILEADX,RESULTPUSHAXMOVAH,09HINT21HPOPAXPUSHAXMOVAL,1SUBstuNum,ALPOPAXPUSHAXMOVAL,[stuNum]CBWMOVCX,AXPOPAXPUSHAXMOVAL,1ADDstuNum,ALPOPAXLP5:MOVDI,CXMOVBX,0LP6:MOVAL,[Student+BX+13]CMPAL,[Student+BX+16+13]JAStaticse1JBExchangeIfo1MOVAL,[Stude
本文标题:北邮微机原理汇编实验
链接地址:https://www.777doc.com/doc-3170519 .html