您好,欢迎访问三七文档
汇编语言程序设计实验一、实验内容1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、调试与运行等步骤。2.参考书例4-8,P165(第3版161页)以单步形式观察程序的执行过程。3.修改该程序,求出10个数中的最大值和最小值。以单步形式观察,如何求出最大值、最小值。4.求1到100的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态。二、实验目的1.学习并掌握IDE86集成开发环境的使用2.熟悉汇编语言的基本算法,并实际操作3.学会利用IDE86进行debug的步骤三、实验方法1.求出10个数中的最大值和最小值(1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比较,把二者中大的交换放后面。在对第二个和第三个数比较,把二者中较大的交换放后面,依此类推直到第十个数字。这样第十位数就是10个数里面最大的。然后选出剩下9个数字里面最大的,还是从头开始这么做,直到第九个数字。以此类推直到第一个数字。(2)流程图2.求1到100的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行j=9i=j,m=0N(m+1)N(m)交换N(m+1)和N(m)i=i-1,m=m+1j=j-1i0j0endyesyesyesnonono100次循环,sum=sum+I,每次循环对i加1.(2)流程图:四、实验源程序1.求出10个数中的最大值和最小值DSEGSEGMENTSum=0,i=1Sum=sum+ii++i=100endnoyesSum/10,余数是p,商是qq=0Sum=q显示p返回dosnoyesNUMDB-1,-4,0,1,-2,5,-6,10,4,0;待比较数字DSEGENDSCODESEGMENTASSUMEDS:DSEG,CS:CODESTART:MOVAX,DSEGMOVDS,AXLEASI,NUMMOVDX,SIMOVCL,9;大循环计数寄存器初始化NEXT1:MOVBL,CL;大循环开始,小循环计数器初始化MOVSI,DXNEXT2:MOVAL,[SI+1]CMP[SI],AL;比较JGGONE;如果后面大于前面跳到小循环末尾CHANGE:MOVAH,[SI];交换MOV[SI+1],AHMOV[SI],ALJMPGONEGONE:addSI,1DECBLJNZNEXT2LOOPNEXT1;小循环结束MOVAX,21H;返回DOSINT21HCODEENDSENDSTART2.求1到100的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态DSEGSEGMENTANSDB4DUP(0)SUMDW0JIADW1TENDW10ZERODW0DSEGENDSCODESEGMENTASSUMECS:CODE,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,SUMBEGIN:ADDAX,JIA;1到100加和开始INCJIACMPJIA,101JNZBEGINMOVSUM,AX;结果放sumMOVDX,0LEASI,ANSADDSI,4GO:SUBSI,1;16进制变10进制循环开始DIVTEN;除以10MOVBYTEPTR[SI],DL;余数从后往前放在sumMOVDX,0CMPAX,ZERO;商为零结束JNZGOMOVCX,4LEASI,ANSDECSIGONE:INCSI;循环显示开始MOVDL,[SI]ADDDL,30H;取sum数字加30H变为ASCALL码MOVAH,2INT21H;显示LOOPGONEMOVAH,4CHINT21HCODEENDSENDSTART五、实验结果1.求出10个数中的最大值和最小值原来的ds段:比较之后的ds段:2.求1到100的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态运行完16进制转10进制的ds段最后显示结果:六、实验中遇到的问题及解决方法在第四个实验中遇到了不少问题:首先是16进制转10进制,当把AX赋值为5050,用DIV10的命令时总会出现错误提示:“dividebvzero”,后来不论如何尝试都不可以,然后思索之后发现5050/10=5052^16(16位二进制数字最大表示范围),因此需要用32进制除以16进制的除法运算。最后结果正确。然后,在把16进制数字除以10的余数放在ans(数据段里面用于存放转换之后的10进制数)里面的时候,发现应该是“05000500”的段总是变成“05000000”,后来在反复单步调试之后发现:MOV[SI],DX语句会一次性改变4位16进制数,导致错误的发生。改正代码为:MOVBYTEPTR[SI],DL之后成功解决。七、心得体会通过本次实验课,我们基本掌握了IDE86集成编译环境的使用方法,包括写代码、编译、连接、调试这四个步骤。更重要的是通过开发环境下面的单步运行,深刻理解了一些算法的过程。同时通过编译课堂上学习的代码,发现自己犯下的错误,并一步步解决问题,从而掌握了汇编语言调试的能力。我认为学习汇编语言就需要不断的犯错,从发生错误到单步运行解决问题,这是一个不可多得的学习过程。同时对于这种过程化的低级语言,我们必须要分模块进行调试,遇到问题先看看先面的环节结果正确吗,这样一步步仔细观察就一定可以发现问题。
本文标题:微机原理实验报告
链接地址:https://www.777doc.com/doc-7241297 .html