微机循环程序分支程序

微机循环程序分支程序

ID:30836411

大小:509.03 KB

页数:12页

时间:2019-01-03

上传者:U-991
微机循环程序分支程序_第1页
微机循环程序分支程序_第2页
微机循环程序分支程序_第3页
微机循环程序分支程序_第4页
微机循环程序分支程序_第5页
资源描述:

《微机循环程序分支程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

北京联合女芳信息夕院InformationCollegeofBeijingUnionUniversity分支程序设计和循环程序设计实验报告题目:分支程序设计i环程序设计名:XXX学号:专业:编制时间:XXX计算机工程2013-05-02北京联合大学编制 实验三分支程序设计—、实验要求和目的1.熟悉汇编语言程序设计结构;2・熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法。二、软硬件环境1.硬件环境:微机CPU486以上,500MB以上硬盘,32M以上内存;2.软件环境:装有MASM6.0>DEBUG、LINK和EDIT等应用程序。三、实验内容和步骤1.实验内容(1)编写计算下面函数值的程序:l,x>0y=,x=0—1,x<0设输入数据为X、输出数据Y,且皆为字节变量,使用Debug查看X、Y两个变量的数据。(2)以ARRAY为首地址的内存单元屮,存放若干个8位的带符号数,统计数组屮大于等于0的数的个数,并将结果存入RESULT字节单元屮。2.实验步骤(1)绘制流程图 LEASl.BIJITMOVCX.COLM杏*INCSI0?BL自增IINCBLx—o?給朿(2)编写程序1、程序1清单:DATASEGMENT//代码段XDB8//给X赋初值YDB?DATAENDSSTACKSEGMENTDB200DUP(0)STACKENDS//堆栈段CODESEGMENT//代码段ASSUMEDS:DATA:CS::CODE;SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAll,XMOVBH,0//程序起始标志CMPAH,BH//比较X与0的人小JZAA//若X=0,则Y=0;JGBB〃若X〉0,WJY=1;AA:MOVY,0JMPCCBB:MOVY,1JMPCCMOVY,2〃否则Y=2CC:MOVDL,YADDDL,30HMOVAH,02HTNT21H//回显MOVAH,4CH1NT2111//结束标志CODEENDSENDSTART运行结果如图:C:XDOCUME^IXADMINI^1>MASMCOMPARE.ASMMicrosoftMicrosoftCorp1993.Allrightsreserued.Invoking:ML.EXE/I./Zm/c/TaCOMPARE.ASMMicrosoftMacroAssemblerUersion6.11CopyrightMicrosoftCorp1981-1993.Allrightsreserved.Assenbling:COMPARE.ASMC:XDOCUME^lXADMINI^l>LINKCOMPARE.OBJMicrosoftSegmentedExecutableLinkerUersion5.31.009Jul131992CopyrightMicrosoftCorp1984-1992.Allrightsreserued.RunFileLCOMPARE.exe]:ListFile[nul.napl:Libraries[.lib]:DefinitionsFile[nul.def]:LINK:warningL4021:nostacksegnentC:XDOCUME^lXADMINI^l'COMPARE1C:XDOCUME^lADMINI^1>.(3)对程序进行debug调试,观察中间结果。实验结果没有错谋,对程序进行反汇编,结果如图:MicrosoftSegnentedExecutableLinkerUersion5.31.009Jul131992CopyrightMicrosoftCorp1984-1992.Allrightsreserued.RunFile[COMPARE.exeJ:ListFileCnul.nap]:Libraries[■lib]:DefinitionsFile[nul・def]=LINK:warningL4021:nostacksegnentC:XDOCUME^ISADMINI^I>DEBUGCOMPARE.EXE-u1476:0000B86814MOUAX,14681476:00038ED8MOUDS,AX1476:00058A260000MOUAH.[0000]1476:0009B700MOUBH应1476:000B38FCCMPAH.BH1476:000D7400JZ000F1476:000FC606010000MOUBVTEPTR[0001).001476:0014EB0EJMP00241476:00167F00JG00181476:0018C606010001MOUBYTEPTR[0001).011476:001DEB05JMP00241476:001FC606010002MOUBVTEPTR[0001).02程序2清单:DATASEGMENTBUFFDB5,8,-5,-10,65COUNTEQUS-BUFFRESULTDBODATAENDS〃数据段〃数组中的数值〃统计数组中有多少个数,用来做循环次数〃统计数组中大于等于0的数的个数STACKSEGMENTDB200DUP(O)STACKENDS〃堆栈段CODESEGMENT〃代码段ASSUMEDS:DATA;SS:STACK;CS:CODESTART:MOVAX,DATAMOVDS,AXMOVBL,RESULTLEASLBUFF〃寄存器BL用作计数器MOVCX.COUNT〃设定循环次数AA:MOVAL,[SI]〃把数组第一个数给AL寄存器CMPAL,0〃把数组中第一个数与0作比较JGEBBJLCC〃若>(),计数器自増1BB:INCBL CC:INCSILOOPAAMOVRESULT,BLMOVDL,RESULTADDDL.30HMOVAH,02HINT21HMOVAH,4CHINT21HCODEENDSENDSTART〃指向数组中下一个数//CX自减1,并跳回AA〃回显〃结束执行结果:C:DOCUME^lADMINI^1>MASMCOUNT•ASMMicrosoftMicrosoftCorp1993.Allrightsreserved.Invoking:ML.EXE/I./Zn/c/TaCOUNT.ASMMicrosoftMacroAssenblerUersion6.11CopyrightMicrosoftCorp1981-1993・Allrightsreserued.Assembling:COUNT.ASMC:DOCUMETADMINI~1>LINKCOUNT.OBJMicrosoftMicrosoftCorp1984-1992.Allrightsreserved.RunFile[COUNT.exe]:ListFile[nul.nap]:Libraries[.lib]:DefinitionsFile[nul・def]:LINK:tiarningL4021:nostacksegmentC:DOCUME^IXADMIN1^1>COUNT3C:DOCUMETADMINI~1>山、试验中遇到的问题及反思1、在第一个实验中题目明确要求一个数字占8位,即一个字节,但在编写程序时给寄存器AX赋值时写成了MOVAX,X,经过老师检查发现了问题并改为MOVAH,X、这种逻辑性的错误并不容易发现,但可能导致程序出错,因此编写程序时应注意数值存储问题。2、在第二个实验屮,程序计数是玄接用变量TNCResult,虽然没冇出错,但是这样CPU直接访问内存会占用系统时间,因此计数时最好使用寄存器,再把结果付给Resulto如:MOVBit0INCBIIMOVRESULT,BII3・在第一次编写程序时结果不能显示,经过同学知道了程序冋显为2号功能调用。 实验四循环程序设计一、实验要求和目的1.了解汇编语言循环程序设计的基木流程;2.熟悉汇编语言循环基本指令的使用方法;3.掌握利用汇编语言的循环指令完成循环程序设计方法。二、软硬件环境1.硬件环境:微机CPU486以上,500MB以上硬盘,32M以上内存;2.软件环境:装有MASM6.0、DEBUG、LINK和EDIT等应用程序。三、实验内容与步骤1.实验内容(1)编写程序,设VARY中冇一组8位的符号数,编程统计其中正数、负数、零的个数,分别存VM、VN、VK变量中。(2)在上述程序基础上,要求修改程序,增加在此数组中找出最大值放入MAX中的同时,找出最小值放入MIN中;2.实验步骤(1)绘制流程图,如下:.FASr;Blll'l-MMK.COUN'IMOVAL.[SI] 开始否足AXMIN?是:MOVMAX,ALMOVMIN.AL是VMINCVM給束LEAST:HUFFdOVCX.ClXMMOVALSil(2)利用EDIT或其他编辑软件,编写汇编源程序。源程序清单如下:DATASEGMENTVARYDB5,2,20,0,33COUNTEQU$-VARYRESULTDB0VMDB0VNDB0VKDB0DATAENDS//数据段//定义一组数据〃统计数组中有多少个数,用來做循环次数//统计数组中有多少个正数,存放在VM中//统计数组中冇多少个负数,存放在VN屮//统计数组中有多少个0,存放在VK中//堆栈段STACKSEGMENTDB200DUP(0)STACKENDSCODESEGMENT//代码段ASSUMEDS:DATA;SS:STACK;CS:CODESTART:MOVAX,DATAMOVDS,AX//开始标志LEASI,VARY//数组首地址赋值给SIMOVCX,COUNT//累加次数AA:MOVAL,[SI]//把首地址中的数值送到寄存器AL中CMPAL,0〃比较AL的值与0的大小JGBB//如果大于0,则跳到BB处JLCC//如果小于0,则跳到CC处INCVK//如果等于0,则VK自增1JMPDDD//跳到DD处 BB:INCVMJMPDDD//若寄存器中的值ATO,则VM自增1,跳到DDCC:INCVNJMPDDDDDD:INCSILOOPAA等于0,顺序执行后而的指令MOVDL,VMADDDL,30HMOVAll,02HINT2111MOVDL,VNADDDL,3011MOVAH,02HTNT21HMOVDL,VKADDDL,3011MOVAll,02111NT2111MOVAH,4CHINT21HCODEENDSENDSTART//若寄存器中的值大于0,则VM自增1,跳到DD//指针下移一位//先将CX值减1,判断是否为0;若不为0,跳回若//回显标志,回显VM中的值//回显标志,回显VM中的值//回显标志,回显VM中的值//结束标志汇编、连接该源程序,产生.EXE文件,结果如下:汇编:C:M1ASM611>nasnge.asoMicrosoftMASMCompatibilityDriuerCopyrightMicrosoftCorp1993.Allrightsreserved•Invoking:ML.EXE/I./Zn/c/Tage•asnMicrosoftMicrosoftCorp1981-1993.Allrightsreserved.Assenbling:ge.asn连接,执行:.CopyrightMicrosoftCoi*p1984-1992.A[RunFile[gc.exe]:iListFile(nu1.nap]:'Libraries(.lib]:DefinitionsPile(nul.def]:LINK:warningL4021:nostacksegnentC:HASM611>»e421对・EXE文件进行调试运行:利用DEBUG的T命令、查看数据区,结果是否正确,如图:xriM^rioxi/ueDuyye.exe0B56:0000B8480BMOUAX.0B480B56:00038ED8NOUDS,fiX0B56:00058D360000LEASIF(0000]0BS6:0009B90700MOUCX,0007DB56:B00C8A04MOUAL.[SI]0B56:000E3C00CMPAL.000B56:0010?F08JG001A0B56:00127C0CJL00200B56:0014FE060900INCB¥TEPTR[0009)0656:0018EB0CJMP00260B56:001AFE060700INCBYTEPTR[0007) 0B56:001EEB06JMP0026 修改后,二:DATASEGMEMTVARYDB5,2,20,-1,-9,0,33COUNTEQI$-VARYRESULTDB0VMDB0VNDB0VKDB0MAXDB0MTNDB0DATAENDS//数据段//定义一组数据〃统计数组中有多少个数,用來做循环次数//统计数组中有多少个正数,存放在VM中//统计数组中有多少个负数,存放在VN中//统计数组中有多少个0,存放在VK中//将数组中绘大值存放在MAX//将数组屮最小值存放在STACKSEGMENTDB200DIP(0)STACKENDS//堆栈段CODESEGMENT//代码段ASSUMEDS:DATA;SS:STACK;CS:CODESTART:MOVAX,DATA//开始标志MOVDS,AXLEAST,VARYMOVCX,COUNTMOVAL,[SI]MOVMAX,ALMOVMIN,AL//数组酋地址赋值给ST//累加次数AA:MOVAL,[SI]CMPAL,0JGBBJLCCJZGG//把首地址中的数值送到寄存器AL中//比较AL的值与0的大小//如果大于0,则跳到BB处//如果小于0,则跳到CC处//如果等于0,则跳到DDD处BB:INCVMJMPDDDCC:INCVN//若寄存器中的值大于0,则VM自增1,跳到DD//若寄存器中的值大于0,则VM自增1,跳到DDJMPDDDGG:INCVKJMPDDDDDD:CMPAL,MAXJLEEMOVMAX,ALJMPFFEE:CMPAL,MTNJGEFMOVMIN,AL//指针下移一位//先将CX值减1,判断是否为0;若不为0,跳冋AA,若//回显标志,回显VM中的值FF:INCSILOOPAA等于0,顺序执行后而的指令MOVDL,VMADDDL,30HMOVAH,02H1NT2111 //回显标志,回显VM中的值MOVDL,VNADDDL,3011MOVAH,02HINT21HMOVDL,VK//回显标志,回显VM中的值ADDDL,30HMOVAll,0211TNT21H//回显标志,回显MAX中的值MOVDL,MAXADDDL,3011MOVDL,MTN//回显标志,回显MTNIp的值MOVAH,02HINT21HADDDL,30HMOVAll,0211INT21H//结束标志MOVAll,4CI1INT21HCODEENDSENDSTART(1)汇编、连接该源程序,产生.EXE文件;汇编:C:sHASM611>MASMXIUGA1.ASMMicrosoftMASMConpatibilityDriverCopyrightMicrosoftCorp1993.Allrightsreserved.Inuokin^:ML.EXE/I.zZmZc/TaX1UGA1.ASMMicrosoftMacrofissenblei*Uersion6.11CopyrightMicrosoftCorp1981-1993.Allrightsreserved.连接、执行:RunFile[XIUGAI.cxe):ListFile(nul.mApl:Libraries[■lib1:DefinitionsFile[nul«def]:[LINK:warningL4021:nostacksegmentC:MASM611>XIUGA1421Q"(2)对.EXE文件进行调试运行:利用DEBUG的T命令或U命令数据区,结果正确。五、试验屮遇到的问题及反思1.实验中标记处写了DD,结果提示总是出错,询问同序发现这是个特殊标记,改为DDD结果正确C 1.在笫二个实验修改时总是出现逻辑错谋,后來画出流程图,根据流程图一步步调试得出正确结果。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭