汇编语言程序设计 第06章:子程序结构.pptVIP

汇编语言程序设计 第06章:子程序结构.ppt

  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文档。上传文档
查看更多
汇编语言程序设计 第06章:子程序结构

第六章 子程序结构 6 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列 解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用 在汇编语言中,子程序又称过程 子程序:功能和结构相同,只是某些变量得值有所不同 调用子程序的程序称为主调程序或主程序 6 子程序结构 子程序的基本结构包括以下几个部分: (1)子程序定义 (2)保护现场和恢复现场 (3)子程序体 (4)子程序返回 6.1 子程序的设计方法 6.1.1 过程定义伪操作 子程序的定义是由过程定义伪指令PROC和ENDP来完成的。其格式如下: 过程名 PROC [NEAR/FAR] ┆ 过程名 ENDP 其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示 一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性(NEAR 和 FAR) 6.1 子程序的设计方法 6.1.1 过程定义伪操作 NEAR/FAR 属性 子程序定义时指定,CALL和RET时则由汇编程序来确定 过程属性的确定原则: NEAR:在同一代码段中 FAR:在不同代码段中 主程序MAIN应定义为FAR属性 例 6.1 子程序的设计方法 6.1.1 过程定义伪操作 SEGX SEGMENT ┆ SUBT PROC FAR ;虽然有一次调用是在本段内,但是 ;由于还有段外调用,所以要用FAR ┆ RET SUBT ENDP ;第一次调用 ┆ CALL SUBT ┆ SEGX ENDS ; SEGY SEGMENT ┆ CALL SUBT ;第二次调用 ┆ SEGY ENDS 6.1 子程序的设计方法 6.1.2 子程序的调用和返回 CALL和RET完成调用和返回的操作 注意运行时的堆栈状态 CALL调用时使返回地址入栈 RET时应该能使返回地址正确出栈 6.1 子程序的设计方法 6.1.3 保护现场和恢复现场 当主程序和子程序使用的寄存器发生冲突时要注意保存和恢复原有信息 可以利用堆栈来实现 PROG PROC PUSH AX PUSH BX PUSH CX ;保护现场 PUSH DX ┆ POP DX POP CX POP BX ;恢复现场 POP AX RET ;返回断点处 PROC ENDP 子程序所使用到的寄存器都要引起注意 6.1 子程序的设计方法 6.1.4 主程序和子程序的参数传递 通过寄存器传递参数 使用十分方便,是最常用的一种方式 只能用于参数不多的情况 6.1 子程序的设计方法 6.1.4 主程序和子程序的参数传递 如果过程和调用在同一源文件(同一程序模块中),则过程可以直接访问模块中的变量 例 6.4 主程序MAIN和过程PROADD在同一源文件中,要求用过程PROADD累加数组的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元中去 源程序 6.1 子程序的设计方法 6.1.4 主程序和子程序的参数传递 通过地址表传递参数 在主程序中建立一个地址表,将要传递给子程序的参数都存放在地址表中,然后将地址表的首地址通过寄存器BX传到子程序中去 子程序通过地址表取得所需参数,并将结果存入指定的存储单元中去 源程序 6.1 子程序的设计方法 6.1.4 主程序和子程序的参数传递 通过堆栈传送参数或参数地址 主程序将参数(参数地址)保存在堆栈中,子程序则从堆栈中取出参数(参数地址) 例:把内存中字变量num的值,转换为4个用ASCⅡ码表示的16进制数码,串的起始地址为string 源程序 6.1 子程序的设计方法 6.1.4 主程序和子程序的参数传递 例:求10个数的累加 源程序 6.1 子程序的设计方法 6.1.4 主程序和子程序的参数传递 多个模块之间的参数传递问题 PUBLIC伪指令 格式:PUBLIC 符号 [,符号] 功能:说明其后的符号是全局符号。全局符号能被其他模块引用。 EXTRN伪指令 格式:EXTRN 符号:类型 [,符号:类型] 功能:说明在本模块中需要引用的、由其他模块定义的符号,即外部符号。 6.1 子程序的设计方法 6.1.5 增强功能的过程定义伪操作 Procname PROC [attributes field] [USER register list] [,parameter field] … Procname ENDP Attributes field(属性字段)包括: Distance :

文档评论(0)

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

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

1亿VIP精品文档

相关文档