第八章子程序与中断调用.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.1.1 子程序的定义 PROCNAME PROC [NEAR/FAR]   ...   RET   ... PROCNAME ENDP 8.1.1 子程序的定义 PROCNAME:子程序名称字段,必选字段,用于标识子程序第一条指令的段内偏移量或逻辑地址。 在关键字PROC和ENDP之间的内容为子程序的主体部分,由指令、伪指令序列构成。 子程序类型 子程序有NEAR和FAR两种类型 NEAR类型的子程序名称对应其段内偏移量;FAR类型的子程序名称对应其完整逻辑地址. 子程序与标号的类型具有相同解释,因为子程序调用是一种特殊的程序流程转移,即带返回功能的流程转移。 NEAR类型是子程序的隐含类型. 子程序类型 NEAR类型的子程序只能在其所在的代码段内被调用,即调用指令和子程序本身必须在同一代码段。 FAR类型的子程序可以在任何一个代码段中被调用,即调用指令不必和子程序在同一代码段。 8.1.2 子程序的调用与返回 (1)子程序调用 一般格式: CALL   子程序名 转移指令通常引用标号作为目标地址的符号地址;类似的,CALL指令引用子程序名作为符号地址。 8.1.2 子程序的调用与返回 执行CALL指令时,CS:IP指向它后面一条指令,该地址称为返回地址(返回点),子程序执行完毕以后一定要返回到这个地址继续执行. CALL指令在把程序流程转向目标地址(子程序的首地址)之前,会把返回地址首先压入堆栈保存,为子程序返回主程序提供必要条件. 8.1.2 子程序的调用与返回 CALL指令功能:保存返回地址到堆栈,把程序流程转移到子程序的入口地址。 标志位影响:无 子程序调用方式 子程序调用指令和无条件转移指令相似,按照它获取目标地址的方式,可以分为: 段内直接调用 段内间接调用 段间直接调用 段间间接调用 1)段内直接调用 格式: CALL  PROC_NAME CALL  NEAR PTR PROC_NAME 此调用方式仅将子程序名称作为一个符号偏移量来引用. 2)段内间接调用 段内间接调用仍然仅引用子程序在代码段内的偏移量,但所引用的偏移量存放在某一个16位寄存器或字内存单元中. 格式:(例子) CALL  BX CALL 20H[BX+SI] 3)段间直接调用 格式: CALL  PROC_NAME CALL  FAR PTR PROC_NAME 此调用方式将子程序名称作为符号地址引用,与段内直接调用不同,这里引用的是完整逻辑地址。 4)段间间接调用 此调用方式引用子程序的完整逻辑地址,并且假定子程序的入口地址保存在指定的双字内存单元中,低地址保存偏移量,高地址保存段基值. 格式:(例子) CALL DWORD PTR DISP[BX+SI] 假定子程序的入口地址保存在一个双字单元中,EA=DISP+(BX)+(SI). (2)子程序的返回 在任何子程序中,最后一条被执行的指令一定是返回指令。 功能:从堆栈中恢复返回地址,把程序流程返回到主程序。 标志位影响:子程序返回指令不会影响标志位 1)段内返回指令 使用段内调用指令调用的子程序,必须使用段内返回指令才能正确返回主程序。 格式1:RET (RETN) 功能:从堆栈中出栈一个字恢复到IP 1)段内返回指令 格式2:RET N (RETN N) N必须使用偶数 功能: 从堆栈中出栈一个字,恢复到IP中, 然后执行 SP=(SP)+ N 1)段内返回指令 (SP)+ N 这一个操作从栈顶直接出栈 N / 2 个字,这一功能主要用于清除主程序通过堆栈传递的入口参数。 2)段间返回指令 使用段间调用指令调用的子程序必须使用段间返回指令才能正确返回主程序。 格式1:RET (RETF) 功能:从堆栈中出栈两个字,先出栈的字用于恢复IP,后出栈的字用于恢复CS。 2)段间返回指令 格式2:RET N (RETF N) N 必须是偶数。 功能: 从堆栈中出栈两个字,分别恢复到IP和CS, 然后执行 SP=(SP)+ N 调用与返回的搭配 主程序中的调用指令和子程序中的返回指令必须正确的配合使用才能保证正确的调用和返回过程。 段内调用必须和段内返回搭配,段间调用必须和段间返回搭配。 调用与返回的搭配 在语法上RET形式表示返回指令,既可以解释为RETN,也可解释为RETF。 具体如何解释由汇编程序根据该子程序的类型来决定。 若在程序中明确使用RETN或RETF形式的返回指令,那么一定注意搭配关系。 8.2

文档评论(0)

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

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

版权声明书
用户编号:5101121231000003

1亿VIP精品文档

相关文档