- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.1 子程序的设计方法 一、子程序指令 二、子程序的调用与返回 三、现场的保护与恢复 四、子程序参数的传递 一、子程序指令 子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行 一、子程序定义 定义子程序的一般格式如下: 子程序名 PROC [NEAR | FAR] … ;子程序体 子程序名 ENDP 对子程序定义的具体规定如下: (1)“子程序名”必须是一个合法的标识符,并前后二者要一致; (2)PROC和ENDP必须是成对出现的关键字,表示子程序定义开始和结束; (3)子程序的类型有近(NEAR)、远(FAR)之分,其缺省的类型是近类型; 一、子程序定义 (4)NEAR类型的子程序只能被与其同段的程序所调用,FAR类型的子程序可被不同段的程序所调用; (5)子程序至少要有一条返回指令。返回指令是子程序的出口语句,但它不一定是子程序的最后一条语句; (6)子程序名有三个属性:段值、偏移量和类型。其段值和偏移量对应于子程序的入口地址,其类型就是该子程序的类型。 一、子程序特点 重复性:一个子程序只占一段存储区域,但可多次 调用它。 通用性: 子程序具有通用的功能。 可浮动性:可以存放在存储区任何地址处。 可递归: 子程序可以调用其本身 一、子程序指令—调用指令 主程序调用子程序需要通过调用指令来实现的。主程序与子程序可以在同一个代码段中,此时调用称为段内调用;也可以在不同代码段中,此时称为段间调用。 直接调用:子程序入口地址直接出现在调用指令中。 间接调用:子程序入口地址存放在寄存器或者存储单元中,寄存器名称或存储单元地址出现在调用指令中 一、子程序指令—调用指令 CALL指令分成4种类型(类似JMP) 段内直接调用 CALL label 或 NEAR PTR DST 段内间接调用 CALL r16/m16 或WORD PTR R16/M16 ; 功能:(1) 将子程序的返回地址存入栈,以便子程序返回时使用 SP←SP-2,SP←IP (2 )转移到子程序入口地址执行子程序 一、子程序指令—调用指令 段间直接调用 CALL FAR PTR DEST 段间间接调用 CALL DWORD PTR DEST 功能:(1)将子程序的返回地址存入栈,以便子程序返回时使用。 SP←SP-2,SP←CS SP←SP-2,SP←IP (2)转移到子程序入口地址执行子程序 一、子程序指令—调用指令 调用指令功能是暂停正在执行的程序,转去执行相应的子程序,由于子程序执行后还要返回主程序,所以转子之前还要记住返回地址(断点地址),即把返回地址送入栈保存。 段内调用只把返回地址的偏移地址(IP)入栈 段间调用要把返回地址的偏移地址(IP)和段地址(CS)都送入栈中。 一、子程序指令—返回指令 根据有无参数,分成2种类型 RET ;无参数返回 RET i16 ;有参数返回 需要弹出CALL指令压入堆栈的返回地址 段内返回——出栈偏移地址IP IP←SS:[SP], SP←SP+2 段间返回——出栈偏移地址IP和段地址CS IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2 一、子程序指令—返回指令RET的参数 RET i16 ;有参数返回 RET指令可以带有一个立即数i16,则堆栈指针SP将增加,即 SP←SP+i16 这个特点使得程序可以方便地废除若干执行CALL指令以前入栈的参数 一、子程序指令说明 在编写子程序时,除了要考虑实现子程序功能的方法,还要养成书写子程序说明信息的好习惯。 其说明信息一般包括以下几方面内容: 功能描述: 一、子程序指令说明 子程序名:供调用子程序时使用 子程序功能:供选子程序时参考。 入口和出口参数:说明子程序执行时具备条件和执行后的结果存放在何处。 所用寄存器 :最好采用寄存器的保护和恢复方法 子程序的所采用的算法:如果算法简单,可以不写 调用时的注意事项:尽量避免除入口参数外还有其它的要求 所用额外存储单元:可以减少为子程序定义自己的局部变量 二、子程序的调用与返回 三、现场的保护与
文档评论(0)