子程序设计和调用_第1页
子程序设计和调用_第2页
子程序设计和调用_第3页
子程序设计和调用_第4页
子程序设计和调用_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第一学期)课程名称:微型计算机原理与应用开课实验室:信自楼111 2011年12月1日年级、专业、班生医091班学号姓名成绩实验项目名称子程序设计和调用指导教师韩晓东教师评语教师签名:2011年12月 日一、实验目的1)学习子程序的定义和调用方法。2)掌握子程序设计、编制及调试。二、实验内容编写计算N个偶数之和的子程序和接收键入的N及将结果送显示器的主程序。三、实验设计思路子程序设计是使程序模块化的一种重要手段。当设计一个比较复杂的程序时,根据程序要实现的若干主要功能及各功能要调用的公用部分,当程序划分为若干个相对独立的模块。确定各模块调用关系和参数传递方式,为各模块分配不同的名字(入口地址),然后把每个模块都编成子程序,最后将这些模块根据调用关系连成一个整体。这样既便于分工合作,又可避免重复劳动,节省存储空间,提高程序设计的效率和质量,使程序整洁,清晰,易读,便于修改和扩充。四、实验设备PC机一台五、实验1.按要求编写程序,关键程序写上注释,以便读懂。

源程序如下:stacksegmentstack'stack' ;定义堆栈段dw32dup(?);堆栈段有32字(64字节)空间stackends;堆栈段结束datasegment;定义数据段inputdb'pleaseinputN:','$';定义字符串inputndb6,0,6dup(?);定义变量数据区nobfdb9dup(?)dataends;数据段结束codesegment;定义代码段beginprocfar;定义一个过程beginassumess:stack,cs:code,ds:datapushds;伪指令assume将段寄存器与段间的对应关系告诉汇编程序subax,axpushax;为通过过程返回DOS作准备movax,data;建立DS段地址movds,ax;movdx,offsetinputmovah,9;9号功能调用,显示器显示“pleaseinputN:"int21h;movdx,offsetnmovah,10;10号功能调用,键入并显示数据nint21hmovsi,offsetn+2movcl,n+1movch,0;callabc;调用子程序abccallsum;调用子程序sumshlax,1movbx,segobfmoves,bxmovdi,offsetobf+1;乘2callcba;调用子程序cbacalllf;调用子程序lfmovdx,offsetobfmovah,9int21h;10号功能调用,输入并显示字符串odfRet;返回beginendP;过程段begin结束sumproc;定义过程sum sum为自然数相加子程序pushcx;保护现场pushbxmovcx,ax;把2*的值赋给cx

movcx,axmovbx,0movax,bx;为bx赋值0;把5*的值赋给axsm: adcbx,1;把5*,1和进位CF相加adcax,bx;把@*,bx和进位CF相加loopsm;cx减1,并判断cx是否为0.cx不为0则转到sm,cx为0则顺序执行popbx;恢复现场popcxRet;返回sumendp;过程sum结束abcproc;定义过程abc abc为将键盘输入的十进制数转化为十六进制子程序movax,0;为ax赋值0abcl:pushcx3*入栈movcx,10;Xi*10+Xi1mulcx;乘法指令调用andbyteptr[si],0fh;把十进制数的ASCII转换为BCD数addal,[si]adcah,0incsi;越过负号指向数字popcx;cx出栈loopabc1;将cx减1,然后判断cx是否为0.若cx不为0,则转移到abc1Ret;cx为0,则返回abcendp;过程abc结束cbaproc;定义过程cba cba为十六进制转化为ASCII码子程序pushax;保护现场pushbxpushcxpushdxpushdiorax,ax;判别数的符号jnsplus;为正,转移到plusmovbyteptres:[di],'-' ;为负,送负号至输出数据区incdi;并求该负数的绝对值negaxplus:movcx,0;将AX中的二进制数转换为十进制数movbx,10lop1:movdx,0divbxpushdx;余数进栈inccx;十进制数位数加1orax,ax;商不为0继续除以10jnzlop1lop2:popax;将十进制数转换为ASCII码addal,30hstosblooplop2moval,'$'stosbpopdi ;恢复现场popdxpopcxpopbxpopaxRet ;返回cba endp ;过程cba结束LFPROC ;定义过程LFMOV DL,0AH ;2号功能调用,换行MOVAH,2INT21HMOVDL,0DH ;2号功能调用,回车MOVAH,2INT21HRET ;返回LFENDP ;过程LF结束codeends ;代码段结束endbegin ;汇编结束,同时指明程序起始点2)运行・EXE文件并进行调试。运行程序,当输入为1时,运行结果如下:-Inlxi两C:\WINNT\system32\cmd.EME-InlxipleaseinputH:12Pressanykeytocontinue一个偶数相加为2,结果正确。当输入为2时,运行结果如下:-Inlxi两C:\WINNT\system32\cmd.EME-InlxipleaseinputH:2Pressanykeytocontinue.两个偶数相加:2+4=6,结果正确。当输入为5时,运行结果如下:-|n|x丙C:\WINNT\sy5tem32\cmd.eHe-|n|xpleaseinputH:530Pressanykeytocontinue5个偶数相加:2+4+6+8+10=30,实验结果正确。当输入为10时,运行结果如下:-Inlxl网C:\WINNT\sy5tem32\cmd.eMe-InlxlpleaseinputH:10110Pressan^keytocontinue.10个偶数相加:2+4+6+8+10+12+14+16+18+20=110,实验结果正确。六、实验拓展.计算N个自然数之和,程序如何改写?若要计算N个自然数之和,只要把程序中过程begin里的shlax,1删除即可。运行结果如下:当输入N=5时-Inlxl两C:\WINNT\system32\cmd.EME-InlxlpleaseinputH:515Pressanykeytocontinue.5个自然数相加:1+2+3+4+5=15,,实验结果正确。.计算N个奇数之和,程序如何改写?若要计算N个奇数之和,要把程序中过程begin里的shlax,1删除,再把过程sum中adcbx,1复制到adcax,bx的下一行。运行结果如下:当输入N=5时网C:\WINNT\sy5tem32\cmd.eMepleaseinputH:525Pressan^keytocontinue5个奇数相加:1+3+5+7+9=25,实验结果正确。.在指出程序中子程序设计中设置的入口和出口参数。子程序sum的入口参数为AX,出口参数为AX子程序@6。的入口参数:DS:SI<---待转换的十进制数的ASCII码的首地址CX<---十进制数的位数出口参数:AX<---转换结果,即16位二进制数子程序cba的入口参数:AX<---待转换的二进制数ES:DI<---转换后的十进制数的ASCII码的存放首地址出口参数:AX子程序LF的入口参数:0AH出口参数:0DH七、心得体会子程序设计和调用实验做完了,我懂得了如何解决包含子程序的程序应解决的3个问题。在设计包含子程序的程序之前应先明确两个问题:一是子程序所处的位置,子程序与调用它的主程序是同一模块,还是分属两个模块;在同一模块时还要明确是在同一代码段,还是在不同的代码段。二是子程序与主程序的参数传递问题。这个实验还是挺难的,程序很复杂,很长,很难懂。读程序花了我很多的时间,常常是能读懂每一条简单语句的意思,但是由它们组成的程序却不能读懂。老师给了我们求N个偶数之和的源程序,在我给它改为求N个自然数之和,N个奇数之和时,由于对所给程序不是很了解,让我觉得很难,经过多次尝试,终于获得了想要的结果,很高兴。在这里,我要特别感谢我的同学,谢谢他们在我遇到困难时帮助我解决。我充分地认识到了理论与实践相结合的重要性,与此同时,我也深切体会到与他人合作的重要性,没有老师同学的帮助,我肯定不能顺利完成任务。另一方面,我也对学习有了新的认识,真正理解了学无止境,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论