您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文档 > 华中科技大学汇编实验报告2
课程实验报告课程名称:汇编语言程序设计实验实验名称:实验二分支程序、循环程序的设计实验时间:2016-3-29,14:00-17:30实验地点:南一楼804室63号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号:U201414813姓名:唐礼威同组学生:无报告日期:2016年3月30日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。特此声明!学生签名:日期:成绩评定实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分)(报告规范、完整、通顺、详实等)总成绩(100分)指导教师签字:日期:汇编语言程序设计实验报告0目录1实验目的与要求.......................................................12实验内容.............................................................13实验过程.............................................................23.1任务1............................................................................................................................23.1.1设计思想及存储单元分配........................................................................................23.1.2流程图........................................................................................................................33.1.3源程序........................................................................................................................33.1.4实验步骤....................................................................................................................63.1.5实验记录....................................................................................................................74体会.................................................................8参考文献................................................................9汇编语言程序设计实验报告11实验目的与要求1、熟悉分支、循环程序的结构及控制方法,掌握分支、循环程序的调试方法;2、加深对转移指令及一些常用的汇编指令的理解;3、加深对常用DOS功能调用指令的理解,进一步熟悉TD的使用。2实验内容设计实现一个学生成绩查询的程序。1、实验背景在以BUF为首址的字节数据存储区中,存放着n个学生的课程成绩表(百分制),每个学生的相关信息包括:姓名(占10个字节,结束符为数值0),语文成绩(1个字节),数学成绩(1个字节),英语成绩(1个字节),平均成绩(1个字节)。例如:NEQU1000BUFDB‘zhangsan’,0,0;学生姓名,不足10个字节的部分用0填充DB100,85,80,?;平均成绩还未计算DB‘lisi’,6DUP(0)DB80,100,70,?DBN-3DUP(‘TempValue’,0,80,90,95,?);除了3个已经具体定义了学生信息的成绩表以外,其他学生的信息暂时假定为一样的。DB‘wangwu’,0,0,0,0DB85,85,100,?2、功能一:提示并输入学生姓名(1)使用9号DOS系统功能调用,提示用户输入学生姓名。(2)使用10号DOS系统功能调用,输入学生姓名。输入的姓名字符串放在以in_name为首址的存储区中。(3)若只是输入了回车,则回到“(1)”处重新提示与输入;若仅仅输入字符q,则程序退出,否则,准备进入下一步处理。3、功能二:以学生姓名查询有无该学生(1)使用循环程序结构,在成绩表中查找该学生。汇编语言程序设计实验报告2(2)若未找到,就提示用户该学生不存在,并回到“功能一(1)”的位置,提示并重新输入姓名。(3)若找到,则将该学生课程成绩表的起始偏移地址保存到POIN字变量中。提示:字符串比较时,当采用输入串的长度作为循环次数时,若因循环次数减为0而终止循环,则还要去判断成绩表中名字串的下一个字符是否是结束符0,若是,才能确定找到了。4、功能三:计算所有学生的平均成绩使用算数运算相关指令计算并保存每一个学生的平均成绩。平均成绩计算公式:(A*2+B+C/2)/3.5,即将语文成绩A乘以权重2、英语成绩C除以权重2后,与数学成绩B一起求和,再计算该生的平均成绩。要求避免溢出。提示:使用循环程序结构,注意寻址方式的灵活使用。把小数3.5转换成分数后再运算避免使用浮点数指令。5、功能四:将功能二查到的学生的平均成绩进行等级判断,并显示判断结果。(1)平均成绩等级显示方式:若平均成绩大于等于90分,显示“A”;大于等于80分,显示“B”;大于等于70分,显示“C”;大于等于60分,显示“D”;小于60分,显示“F”。提示:使用分支程序结构,采用2号DOS系统功能调用显示结果。(2)使用转移指令回到“功能一(1)”处(提示并输入姓名)。3实验过程3.1任务13.1.1设计思想及存储单元分配设计思想:本实验主要是要解决3个问题:一是提示并输入学生姓名;二是如何进行字符串的比较从而查询学生;三是如何计算平均分从而分出等级。依据本次实验的要求,此处用分支、循环程序的结构及控制方法来解决。寄存器分配:CX:存放学生数量(默认3),计数器作用;BX:存放目标学生下标值,得到分数缓冲区首地址;BP:存放缓冲区基地址;AL:存放平均成绩;AX,DX,SI:临时寄存器;汇编语言程序设计实验报告33.1.2流程图开始9号调用输出提示信息,10号调用输入查询学生姓名输入字符串为空?Y9号调用:是否继续,按任意键继续,按q退出N结束YNCX=0?Y输出查找失败N缓冲区是否为零N当前字符是否匹配NCX--Y缓冲区减一Y计算平均成绩并输出等级3.1.3源程序.386STACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSDATASEGMENTUSE16NEQU3BUFDB'zhangsan',0,0DB100,85,80,?DB'lisi',6DUP(0)DB80,100,70,?DB'wangwu',4DUP(0)DB85,85,100,?MSGDB'Inputthename:$'CONTINUDB'Enteranykeystocontinue(ifenterq,exit!):$'FAILDB'NotExist!$'INPUTDB10DB?DB10DUP(0)DATAENDS汇编语言程序设计实验报告4CODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXJMPBEGINFAILED:LEADX,OFFSETFAIL;查找失败MOVAH,9HINT21HLOOPA:MOVDL,0AH;换行符MOVAH,2HINT21HLEADX,OFFSETCONTINU;继续MOVAH,9HINT21HMOVDL,0AH;换行符MOVAH,2HINT21HMOVDL,0DHMOVAH,2HINT21HMOVAH,8HINT21HCMPAL,71HJEOVER;输入'q',退出程序BEGIN:MOVCX,N;学生个数LEADX,OFFSETMSG;输出提示信息MOVAH,9HINT21HMOVDL,0AH;换行符MOVAH,2HINT21HLEADX,OFFSETINPUT;读入学生姓名MOVAH,0AHINT21HMOVDL,0AH;换行符MOVAH,2HINT21HLEABP,OFFSETINPUT;将INPUT基址存放至BPADDBP,2汇编语言程序设计实验报告5CMPDS:BYTEPTR[BP-1],0H;空字符串JELOOPAINCCXCOMPA:DECCXJEFAILED;查找失败,重新输入MOVBX,N;计算目标学生下标值,存放至BXSUBBX,CXIMULBX,14;根据目标学生下标值,找到分数缓冲区首地址MOVAX,10;临时计数器MOVSI,0COMPB:MOVDL,[BX+SI]MOVDH,BYTEPTRDS:[BP+SI]CMPDL,0;如果缓冲区姓名已结束,说明查找成功JECAL;跳转至平均成绩计算处CMPDH,DL;比较当前缓冲区姓名与输入姓名字符JNECOMPA;当前字符相同,继续循环以比较下一字符INCSIDECAXJNECOMPBCAL:MOVBX,N;计算目标学生下标值,存放至BXSUBBX,CXIMULBX,14ADDBX,10;根据目标学生下标值,找到分数缓冲区首地址BX=m*14+10MOVAX,0MOVDX,0MOVAL,[BX];计算平均成绩ADDAX,AXMOVDL,[BX+1]ADDAX,DXMOVDL,[BX+2]SARDL,1ADDAX,DX;AL=A*2+B+C/2SALAX,1MOVDL,7IDIVDL;AL=2*AL/7MOV[BX+3],AL;AVG=AL(AL/3.5)CMPAL,90JGELEVELA汇编语言程序设计实验报告6CMPAL,80JGELEVELBCMPAL,70JGELEVELCCMPAL,60JGELEVELDJMPLEVELFLEVELA:MOVDL,41H;输出成绩等级MOVAH,2HINT21HJMPLOOPALEVELB:MOVDL,42HMOVAH,2HINT21HJMPLOOPALEVELC:MOVDL,43HMOVAH,2HINT21HJMPLOOPALEVELD:MOVDL,44HMOVAH,2HINT21HJMPLOOPALEVELF:MOVDL,46HMOVAH,2HINT21HJMPLOOPAOVER:MOVAH,4CHINT21HCODEENDSENDSTART3.1.4实验步骤1.使用编辑程序EDIT.EXE录入源程序,存盘文件名为shiyan.ASM。2.使用MASM6.0汇编源文件。即MASMshiyan;3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4.使用连接程序LINK.EXE将汇编生成的shiyan.OBJ文件连接成执行文件。即LINKshiyan;5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成汇编语言程序设计实验报告7shiyan.EXE文件。6.执行该程序。即在命令行提示符后输入shiyan后回车,观察执行现象。7.让9号功能调用显示的信息放在自己希望的位置。8.在9号功能调用时,尝试带显示字符串的结尾没有“$”结束符。9.10号功能调用时,输入的字符数超过定义的数量时,它是如何处理的?3.1.5实验记录(包括实验条件、输入/
本文标题:华中科技大学汇编实验报告2
链接地址:https://www.777doc.com/doc-2590390 .html