第7章汇编语言程序设计(版本).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文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ② 段内间接调用: 格式:CALL REG/M 功能:调用子程序。执行时先把返回地址压入堆栈,再把指令指定的16位通用寄存器或内存单元的内容送给IP,最后把控制权交给子程序。 说明:这种指令使用与转移地址有关的寻址方式中的段内间接寻址方式,指令指定的通用寄存器或内存单元中存放段内偏移量。 * ⑵ 段间调用 这类调用指令可以实现段间调用(FAR型调用),执行时即要改变IP值,也要改变CS值。 * ① 段间直接调用: 格式:CALL FAR PTR PROCEDURE 功能:调用PROCEDURE子程序。执行时先把返回地址(当前IP值和当前CS值)压入堆栈,再把指令中的偏移量部分送给IP,段基址部分送给CS,最后把控制权交给子程序。 说明:这种指令使用与转移地址有关的寻址方式中的段间直接寻址方式。 例3. 设子程序B与CALL指令不在同一段内,则段间直接调用B子程序的指令是: CALL FAR PTR B * ② 段间间接调用: 格式:CALL M 功能:调用子程序。执行时先把返回地址(当前IP值和当前CS值)压入堆栈,再把M的低字送给IP,高字送给CS,最后把控制权交给子程序。 说明:这种指令使用与转移地址有关的寻址方式中的段间间接寻址方式,其中M 为内存的双字长地址指针,低字部分为16位的偏移量,高字部分为段基址。 * 例4. 对于例3,若子程序B的入口地址(偏移量和段基址)放在变量VAR中,即可通过VAR实现段间间接调用。如下所示: CALL DWORD PTR VAR ;从VAR变量中得到子程序B的入口地址实现调用 变量VAR的地址也可以通过寄存器间接寻址方式、基址变址寻址方式等存储器操作数寻址方式得到。 例. CALL DWORD PTR 8[BX][DI] * 当子程序执行完时,需要返回到调用它的程序之中。为了实现此功能,指令系统提供了一条专用的子程序返回指令。其格式如下: RET/RETN/RETF [Imm] 子程序的返回在功能上是子程序调用的逆操作。为了与子程序的远、近调用相对应,子程序的返回也分:远返回和近返回。 7.5.2 返回指令 * 如果返回指令后面带有立即数(其值通常为偶数),则表示在得到返回地址之后,SP还要增加的偏移量,它不是类似于高级语言中子程序的返回值。 例如: RET ;可能是近返回,也可能是远返回 RETN ;近返回指令 RETF ;远返回指令 RET 6 ;子程序返回后,(SP)←(SP) + 6 * 2.子程序返回指令 RET 执行这组指令可以返回到被调用处。有两条返回指令,它们都不影响标志。 * (1) 返回指令 RET 格式:RET 功能:按照CALL指令入栈的逆序,从栈顶弹出返回地址(弹出一个字到IP,若子程序是FAR型还需再弹出一个字到CS),然后返回到主程序继续执行。 无论子程序是NEAR型还是FAR型,返回指令的汇编格式总是用RET表示。但经汇编后会产生不同的机器码。在DEBUG中,段间返回指令被反汇编成RETF。 * (2) 带立即数的返回指令 格式:RET imm16 功能:按照CALL指令入栈的逆序,从栈顶弹出返回地址(弹出一个字到IP,若子程序是FAR型还需再弹出一个字到CS),返回到主程序,并修改栈顶指针SP=(SP)+imm16。 注:其中imm16是16位的立即数,设通过堆栈给子程序传递了n个字型参数,则imm16=2n。 * 含有子程序的程序结构 在汇编语言中用过程定义伪指令定义子程序。过程定义伪指令格式: 过程名 PROC 【类型】 … 过程名 ENDP * 1.调用程序和子程序在同一个代码段的程序结构(子程序类型可缺省,注意END后必须跟主程序名) CODE SEGMENT MAIN PROC FAR … CALL SUB1 RET MAIN ENDP SUB1 PROC … RET SUB1 ENDP CODE ENDS END MAIN * 2.调用程序 和子程序在不同段的程序结构 (SUB2既被段间调用又被段内调用,必须是FAR属性。CALL要显式说明是FAR属性) CODE1 SEGMENT MAIN PROC FAR … CALL FAR PTR SUB2 … RET MAIN

文档评论(0)

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

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

1亿VIP精品文档

相关文档