子程序的调用和返回指令

 我来答
科技鉴赏官
2023-01-17 · TA获得超过1472个赞
知道小有建树答主
回答量:808
采纳率:100%
帮助的人:77万
展开全部
子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。

  一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;

  另一方面,转移指令是一种“一去不复返”的操作,而当子程序完后,还要求CPU能转而执行调用指令之下的指令,它是一种“有去有回”的操作。

  为了满足子程序调用和返回操作的特殊性,在指令系统中设置了相应的特定指令。

调用指令(CALL)
  调用子程序指令的格式如下:
  CALL 子程序名/Reg/Mem
  子程序的调用指令分为近(near)调用和远(far)调用。如果被调用子程序的属性是近的,那么,CALL指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器IP即可实现执行程序的转移。近调用指令的堆栈操作.

  如果被调用子程序的属性是远的,那么,CALL指令将产生一个远调用。这时,调用指令不仅要把该指令之后地址的偏移量压进栈,而且也要把段寄存器CS的值压进栈。在此之后,再把被调用子程序入口地址的偏移量和段值分别送给IP和CS,这样完成了子程序的远调用操作。远调用指令的堆栈操。

  子程序调用指令本身的执行不影响任何标志位,但子程序体中指令的执行会改变标志位,所以,如果希望子程序的执行不能改变调用指令前后的标志位,那么,就要在子程序的开始处保护标志位,在子程序的返回前恢复标志位。
  例如:
  CALL DISPLAY;DISPLAY是子程序名
  CALL BX;BX的内容是子程序的偏移量
  CALL WORD1;WORD1是内存字变量,其值是子程序的偏移量
  CALL DWORD1;DWORD1是双字变量,其值是子程序的偏移量和段值
  CALL word ptr [BX];BX所指内存字单元的值是子程序的偏移量
  CALL dword ptr [BX];BX所指内存双字单元的值是子程序的偏移量和段值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式