收藏 分享(赏)

子程序的调用和返回指令.doc

上传人:scg750829 文档编号:12247790 上传时间:2021-12-06 格式:DOC 页数:2 大小:26.50KB
下载 相关 举报
子程序的调用和返回指令.doc_第1页
第1页 / 共2页
子程序的调用和返回指令.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、1、子程序的调用和返回指令子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU 将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;另一方面,转移指令是一种“一去不复返”的操作,而当子程序完后,还要求 CPU 能转而执行调用指令之下的指令,它是一种“有去有回”的操作。为了满足子程序调用和返回操作的特殊性,在指令系统中设置了相应的特定指令。1、1 调用指令(CALL)调用子程序指令的格式如下:CALL 子程序名/Reg/Mem子程序的调用指令分为近(ne

2、ar)调用和远(far) 调用。如果被调用子程序的属性是近的,那么,CALL 指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的) 压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器 IP 即可实现执行程序的转移如果被调用子程序的属性是远的,那么,CALL 指令将产生一个远调用。这时,调用指令不仅要把该指令之后地址的偏移量压进栈,而且也要把段寄存器 CS 的值压进栈。在此之后,再把被调用子程序入口地址的偏移量和段值分别送给 IP 和 CS,这样完成了子程序的远调用操作00405600 call 0040689500405604 子程序调用指令本身的执行不影响任何标志位,但子

3、程序体中指令的执行会改变标志位,所以,如果希望子程序的执行不能改变调用指令前后的标志位,那么,就要在子程序的开始处保护标志位,在子程序的返回前恢复标志位。例如:CALL DISPLAY;DISPLAY 是子程序名 CALL BX;BX 的内容是子程序的偏移量 CALL WORD1;WORD1 是内存字变量,其值是子程序的偏移量 CALL DWORD1;DWORD1 是双字变量,其值是子程序的偏移量和段值 CALL word ptr BX;BX 所指内存字单元的值是子程序的偏移量 CALL dword ptr BX;BX 所指内存双字单元的值是子程序的偏移量和段值 1、2 返回指令(RET)当子程序执行完时,需要返回到调用它的程序之中。为实现此功能,指令系统提供了一条专用的返回指令。其格式如下:RET/RETN/RETF Imm子程序的返回在功能上是子程序调用的逆操作。为了与子程序的远、近调用相对应,子程序的返回也分:远返回和近返回。返回指令在堆栈操作方面是调用指令的逆过程

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报