第8章 子程序设计.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 子程序设计

第8章 子程序设计 8.1 子程序的基本概念 8.2 子程序定义 8.3 子程序的调用与返回 8.4 编写子程序的基本要求 8.5 子程序的参数传递方法 8.6 子程序的嵌套与递归 8.7 多模块的连接 8.1 子程序的基本概念 子程序又称为过程(Procedure),它相当于高级语言中的过程或函数。 在程序设计中,往往把多次重复出现、具有通用性、能够完成特定功能的程序段编写成相对独立的程序模块,这个特定的模块就是子程序。 这样既可缩短程序的长度,又可使程序的结构变得紧凑,还可以加快编程速度、节省存储空间。 一般子程序具备如下几个特性: 重复性 通用性 浮动性 模块化 为方便用户编程,经常将一些通用的子程序事先编好,组成一个子程序库,并作为计算机系统软件的一部分提供给用户使用,这样的子程序称为标准子程序。当用户需要使用某个标准子程序时,只要按照系统规定的调用方式对它调用即可。此外,用户还可建立自己的子程序库。 调用子程序的程序称为主程序。 子程序的特点:可以简化程序结构,提高执行效率。每个子程序在编译后只产生一次目标代码,从而提高了运行效率。 8.2 子程序定义 子程序名 PROC [NEAR/FAR] … ;子程序体 RET ;返回到调用程序 子程序名 ENDP 其中子程序名为标识符,它是子程序的入口地址。 子程序名有三个属性:段属性、偏移属性和类型属性。其段和偏移属性对应于子程序的入口地址,其类型属性就是该子程序的类型。 编写子程序时,除考虑实现功能外,还要养成书写子程序说明信息的好习惯。其说明信息一般包括:功能描述、入口和出口参数等内容。其中,入口和出口参数通常包括:所用寄存器、存储单元、采用的算法、调用注意事项、编写者、编写日期等。一般,这些参数可根据需要来选择! 8.3 子程序的调用与返回 8.3.1 子程序的调用指令(CALL) 8.3.2 子程序的返回指令(RET) 8.3.1 子程序的调用指令(CALL) CALL 子程序名/Reg/Mem 1.段内直接调用指令: CALL OPD 执行的操作: (SP)-2→SP,(IP) →[SP];子程序入口地址OPD→ IP 2.段内间接调用指令: CALL WORD PTR OPD 执行的操作:(SP)-2→SP,(IP)→[SP] ;OPD所在的偏移地址→ IP 3.段间直接调用指令: CALL FAR PTR OPD 执行的操作:(SP)-2→ SP,(CS)→[SP] ;(SP)-2→ SP,(IP) →[SP] ;OPD指定的偏移地址→ IP;OPD指定的段地址→ CS。 4.段间间接调用指令: CALL DWORD PTR OPD 执行的操作: (SP)-2→SP,(CS)→[SP];(SP)-2→SP,(IP) →[SP] ,(EA)→IP;(EA+2)→CS 子程序调用指令并不影响任何标志位,但子程序中的指令可以改变标志位。如果希望子程序调用前后的标志位不变,则在子程序调用前保护标志位,而子程序返回后恢复标志位。 例: … PUSHF ;保护现场 CALL SI POPF ;恢复现场 … 8.3.2 子程序的返回指令(RET) RET/RETN/RETF [立即数] 1.近返回指令 ① RET 执行操作:([SP])→IP,SP+2→SP ② RET n 执行操作:([SP])→IP,(SP)+2→SP,(SP)+n→SP 2.远返回指令 ① RET 执行操作:([SP])→IP,(SP)+2→SP;([SP])→CS,(SP)+2→SP ② RET n 执行操作:([SP])→IP,(SP)+2→SP;([SP])→CS,(SP)+2→SP;(SP)+n→SP CALL和RET指令都不影响标志位。 8.4 编写子程序的基本要求 1.子程序调用方法说明 为了便于阅读、维护和使用子程序,在子程序清单前,应以注释的方式提供子程序的使用方法说明。主要包括:子程序名、子程序功能、寄存器与存储单元分配、入口参数、出口参数、子程序调用示例等。 2.保护现场和恢复现场 保护现场和恢复现场是子程序设计时必须考虑的问题。由于子程序中使用的寄存器,很可能在调用子程序前主程序正在使用,并且其值在从子程序返回主程序后还要继续使用,因此,要使主程序在调用子程序后仍能正常运行,就必须在调用子程序前保护现场,而子程序返回后立即恢复 8.5 子程序的参数传递方法 1. 寄存器法 寄存器法就是子程序的入口参数和出口参数存放在约定的特定寄存器中。这是一种最常见方法,其优点是数据传递速度快、编程方便、节省内存。由于寄存器的个数有限,所以,只适用于传递参数较少的情况。 2.约定单元法 约定单元法是子程序的入口和出口参数存放在约定的存储单元中

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档