[高等教育]11次课--子程序.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文档。上传文档
查看更多
[高等教育]11次课--子程序

* * * * 第六章 子程序结构 6.1 子程序的设计方法 功能相对独立,具有通用性,或在程序中反复出现的程序片段定义为子程序,可有效缩短程序的总长度. 子程序是模块化设计的基础. 一、为什么学习子程序设计? 子程序过程定义伪操作 子程序的调用和返回 子程序的参数传递 学习内容: 二、子程序设计 子程序:完成一定功能的指令集合。 1、子程序定义伪指令 子程序名 PROC 属性 子程序体 子程序名 ENDP 子程序名: 表示子程序的入口地址,其定义与变量、标号要求一致。 属性: 可以为NEAR 或FAR。 属性确定规则: 1)调用程序和过程在同一代码段,使用NEAR属性 2)调用程序和过程不在同一代码段,使用FAR属性 一旦子程序设计好,应该允许控制从另一个程序转向子程序。子程序执行完后,返回调用程序继续执行。 汇编语言有两条支持子程序操作的指令:CALL 和RET 2、支持子程序调用的两条指令 CALL DST RET DST有很多变化形式,同JMP指令。 段内直接调用 段内间接调用 段间直接调用 段间间接调用 只修改IP 修改CS、IP 与JMP指令不同的是: JMP LL LL: CALL LL LL PROC FAR RET CALL的执行 首先把过程的返回地址(CALL指令的下一条指令地址)入栈 段内调用:IP入栈 段间调用:CS:IP入栈 转移到过程入口去执行 段内直接调用 CALL PROC_NAME ?? 将 IP入栈 跳转至 PROC_NAME ?? SP = SP – 2 (SP) = IP IP = IP + Disp16 直接使用过程名,类似标号. 地址差等于目标地址到CALL指令下一条指令开始地址的差. 段内间接调用 CALL OPRD ?? 将 IP入栈 JMP OPRD ?? SP = SP – 2 (SP) = IP IP = (OPRD) 可以是地址寄存器或存储器操作数,其中存放目标的偏移地址. 段间直接调用 CALL PROC_NAME ?? PUSH CS PUSH IP JMP PROC_NAME ?? SP = SP – 2 (SP) = CS SP = SP – 2 (SP) = IP IP = 过程入口偏移 CS = 过程入口段值 直接使用过程名,过程定义在另一段. 段间间接调用 CALL OPRD ?? 将 CS入栈 将 IP入栈 JMP OPRD ?? SP = SP – 2 (SP) = CS SP = SP – 2 (SP) = IP IP = OPRD的低字 CS = OPRD的高字 存储器操作数,其中存放目标过程的段值及偏移地址. 汇编格式: RET RET EXP 操作:(1)段内返回(近返回) IP←(SP+1,SP) SP ←SP+2 SP ←SP+DATA(如果选用了EXP) (2)段间返回(远返回) IP ←(SP+1,SP) SP ←SP+2 CS ←(SP+1,SP) SP ←SP+2 SP ←SP+DATA(如果选用了EXP) RET 段内返回 段间返回 子程序调用的参数传递 子程序调用和返回指令 code segment Start: …… call sub …… mov ah,4ch int 21h sub proc near …… ret sub endp code ends 段内调用和返回 code1 segment Start: …… call sub …… mov ah,4ch int 21h code1 ends code2 segment sub proc far …… ret sub endp code2 ends 段间调用和返回 说明 MASM能根据被调用过程的类型来决定采用段内直接调用还是段间直接调用。 MASM能根据RET所在的过程的类型来决定采用段内返回指令还是段间返回指令,只有当RET出现在远过程中时,MASM才将RET翻译成段间返回指令。 注意子程序运行期间

文档评论(0)

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

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

1亿VIP精品文档

相关文档