欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > PPT文档下载  

    第六章子程序设计.ppt

    • 资源ID:259731       资源大小:220.50KB        全文页数:28页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第六章子程序设计.ppt

    2023/3/30,汇编语言程序设计教程,1,第6章 子程序设计,6.1 子程序的定义与调用6.2 子程序的参数传递方法6.3 子程序的嵌套与递归,2023/3/30,汇编语言程序设计教程,2,子程序,在程序设计过程中,经常会遇到一些功能结构相同,仅是某些值不同的程序段在程序中多次出现,这样的重复编写既繁琐又费时。为此,在设计程序时,将可以多次调用、能完成特定操作功能的程序段编写成独立的程序模块称为子程序。调用这些子程序的程序称为主程序。一个子程序应具备重复性、通用性、可浮动性、可递归性和可重入性。主程序调用子程序通过调用指令CALL来实现。子程序返回主程序的功能由返回指令RET实现。子程序调用时要注意保护现场,子程序返回时要及时恢复现场。,2023/3/30,汇编语言程序设计教程,3,6.1 子程序的定义与调用,6.1.1 子程序的定义6.1.2 子程序的调用,2023/3/30,汇编语言程序设计教程,4,子程序定义与调用的结构,2023/3/30,汇编语言程序设计教程,5,子程序的适应范围,多次重复使用的程序段;具有通用性的程序段;模块化程序结构中的子模块;具有特殊功能的程序段;中断服务程序。,2023/3/30,汇编语言程序设计教程,6,采用子程序结构的优点,简化了程序设计过程,使程序设计时间大量节省。缩短了程序的长度,节省了计算机汇编源程序的时间和程序的存储空间。增加了程序的可读性,便于对程序的修改和调试。方便了程序的模块化、结构化和自顶向下的程序设计。,2023/3/30,汇编语言程序设计教程,7,子程序的定义,子程序是用过程定义伪指令PROC和ENDP来定义的,还应指出过程的类型属性,因此,子程序也可称为过程。在PROC和ENDP之间是为完成某一特定功能的一连串指令,其最后一条指令是返回指令RET。,2023/3/30,汇编语言程序设计教程,8,子程序定义格式,过程名 PROC NEAR或FAR 过程体语句RET过程名 ENDP其中,“过程名”是子程序入口的符号地址,NEAR或FAR是过程的类型属性,它指出对该过程的调用是段内的调用还是段间调用。NEAR用于段内调用,而FAR用于段间调用。,2023/3/30,汇编语言程序设计教程,9,过程属性的确定原则,调用程序和过程若在同一代码段中,则使用NEAR属性。调用程序和过程若不在同一代码段中,则使用FAR属性。主程序应定义为FAR属性。因为程序的主过程被看作是DOS调用的一个子程序,而DOS对主过程的调用和返回都是FAR属性。,2023/3/30,汇编语言程序设计教程,10,子程序的调用格式,子程序的调用和返回是由CALL和RET指令完成。子程序的正确调用和正确返回是执行子程序的基本保证。CALL指令的格式为:CALL 过程名 为了使子程序正确地执行,除了正确选择过程的属性外,正确使用堆栈也是非常重要的。,2023/3/30,汇编语言程序设计教程,11,例:段内直接调用,显示P,CODE SEGMENT ASSUME CS:CODESTART:CALL DISP MOV AH,4CH INT 21HDISP:MOV DL,P MOV AH,2 INT 21H RETCODE ENDS END START,DISP PROC MOV DL,P MOV AH,2 INT 21H RETDISP ENDP,2023/3/30,汇编语言程序设计教程,12,例:段内间接调用,显示P,CODE SEGMENT ASSUME CS:CODESTART:MOV OFFSET DISP CALL BX MOV AH,4CH INT 21HDISP:MOV DL,P MOV AH,2 INT 21H RETCODE ENDS END START,2023/3/30,汇编语言程序设计教程,13,例:段间直接调用,显示P,CODE1 SEGMENT ASSUME CS:CODE1START:CALL FAR PTR DISP MOV AH,4CH INT 21HDODE1 ENDSCODE2 SEGMENT ASSUME CS:CODE2DISP PROC FAR MOV DL,P MOV AH,2 INT 21H RETDISP ENDPCODE2 ENDS END START,2023/3/30,汇编语言程序设计教程,14,例:段间间接调用,DATA SEGMENTNUM DW 1CAADDR DW OFFSET SUBRT0 DW SEG SUBRT0 DW OFFSET SUBRT1 DW SEG SUBRT1 DW OFFSET SUBRT2 DW SEG SUBRT02DATA ENDSCODE SEGMENT ASSUME CS:CODESTART:MOV BX,NUM ADD BX,BX ADD BX,BX MOV SI,OFFSET CAADDR CALL FAR TR SI+BX SUBRT0.,2023/3/30,汇编语言程序设计教程,15,子程序的返回,1)段内返回 RET IP(SP),SP+2SP段间返回 RET IP(SP),SP+2SP CS(SP),SP+2SP,2023/3/30,汇编语言程序设计教程,16,子程序的返回,3)段内修改栈指针的返回指令RET nn(立即数)IP(SP),SP+2SP SP+nn SP4)段间修改栈指针的返回指令RET nn(立即数)IP(SP),SP+2SP CS(SP),SP+2SP SP+nn SP,2023/3/30,汇编语言程序设计教程,17,子程序的调用方法说明,子程序名:供调用子程序时使用。子程序功能:供选择子程序时参考。占用寄存器:说明子程序执行时,要使用哪些寄存器;自程序执行完后,哪些寄存器的内容被改变,哪些寄存器的内容保持不变。入口参数:说明子程序执行应具备的条件。出口参数:说明子程序执行后的结果存放在何处。子程序调用示例:说明子程序的调用格式。,2023/3/30,汇编语言程序设计教程,18,现场的保护与恢复,如果调用程序在调用子程序之前的某些寄存器或存储单元的内容,在从子程序返回到调用程序后还要使用,而子程序又恰好使用了这些寄存器或存储单元,则这些寄存器或存储单元的原有内容遭到了破坏,那就会使程序运行出错。为防止这种错误的发生,在执行子程序之前应该把子程序所使用的寄存器或存储单元的内容保存在堆栈中,而退出子程序之前再恢复原有的内容。,2023/3/30,汇编语言程序设计教程,19,寄存器的保护方法,(1)在每次调用子程序时,将需要保护的寄存器的内容,在调用程序中压入堆栈;从子程序返回后,在调用程序中将栈中相应内容弹出。这种方法可能会使调用程序不易理解。(2)进入子程序后,首先把需要保护的寄存器的内容压入堆栈,而在返回调用程序前再恢复这些寄存器的内容。这种方法的好处是:在调用程序中的任何地方都可调用子程序,而不会破坏任何寄存器的原有内容;这种方法只需要写一次入栈和出栈指令即可。,2023/3/30,汇编语言程序设计教程,20,6.2 子程序的参数传递方法,6.2.1 通过寄存器传递参数6.2.2 通过堆栈传递参数6.2.3 通过存储单元传递参数,2023/3/30,汇编语言程序设计教程,21,参数传递,主程序在调用子程序时,往往要向子程序传递一些参数。同样,子程序运行后也经常要把一些结果传回给主程序。主程序和子程序的这种信息传递称为参数传递。一般将子程序需要从主程序获取的参数称为入口参数,而将子程序返回给主程序的参数称为出口参数。常用的有寄存器传递法、存储器传递法和堆栈传递法。,2023/3/30,汇编语言程序设计教程,22,通过寄存器传递参数,通过寄存器传递参数的思想是:主程序把入口参数送入某些寄存器,然后调用子程序,子程序中直接使用存放入口参数的寄存器进行处理。子程序处理完数据后,将执行结果作为出口参数存入寄存器中。返回主程序后,主程序对存放在寄存器中的出口参数进行相应的处理。用寄存器传递参数方便、直观,是经常使用的方法。但能传递的参数有限,适于参数较少的情况。,2023/3/30,汇编语言程序设计教程,23,通过堆栈传递参数,通过堆栈传递参数的思想是:主程序把入口参数入栈保存,然后调用子程序,子程序从堆栈中弹出入口参数进行处理。子程序处理完数据后将执行结果作为出口参数入栈保存,返回主程序后,主程序从堆栈中弹出出口参数进行相应处理。,2023/3/30,汇编语言程序设计教程,24,通过内存单元传递参数,通过内存缓冲区传递参数的思想是:主程序中将入口参数送入某些存储单元,然后调用子程序,子程序从存储单元中取出入口参数进行处理。子程序处理完数据后,将执行结果作为出口参数存入存储单元中,返回后由主程序进行处理。用存储器传递参数的最简单方法是定义位置、格式确定的缓冲存储区,凡是需要子程序处理的参数,无论原来存放在什么地方,必须按格式要求先传入缓冲区。子程序从缓冲区取得数据进行规定的处理,产生的结果按格式要求存入这个或另外的缓冲存储区,调用程序再从缓冲区取走结果。,2023/3/30,汇编语言程序设计教程,25,6.3 子程序的嵌套与递归,6.3.1 子程序的嵌套调用6.3.2 子程序的递归调用,2023/3/30,汇编语言程序设计教程,26,子程序的嵌套调用,子程序内包含有子程序的调用就是子程序的嵌套。嵌套深度(即嵌套的层次数)逻辑上没有限制,但由于子程序的调用需要在堆栈中保存返回地址以及寄存器等数据,因此实际上受限于开设的堆栈空间。嵌套子程序的设计并没有什么特殊要求,除子程序的调用和返回应正确使用CALL和RET指令外,还要注意寄存器的保存与恢复,以避免各层子程序之间因寄存器使用冲突而出错。当调用程序去调用子程序时,将产生中断点,而子程序执行完后返回到调用程序的断点处,使调用程序继续往下执行。对于嵌套结构,中断点的个数等于嵌套的深度。,2023/3/30,汇编语言程序设计教程,27,子程序嵌套示意图,2023/3/30,汇编语言程序设计教程,28,子程序的递归调用,当子程序直接或间接地嵌套调用自身时称为递归调用,含有递归调用的子程序称为递归子程序。递归子程序的设计必须保证每次调用都不破坏以前调用时所用的参数和中间结果,因此将调用的输入参数、寄存器内容及中间结果都存放在堆栈中。递归子程序必须采用寄存器或堆栈传递参数,递归深度受堆栈空间的限制。递归子程序对应于数学上对函数的递归定义,它往往能设计出效率较高的程序,可以完成相当复杂的计算。,返回,

    注意事项

    本文(第六章子程序设计.ppt)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开