首页 > 其他分享 >函数的调用机制

函数的调用机制

时间:2022-12-23 20:25:33浏览次数:39  
标签:调用 函数 程序 计数器 地址 指令 机制

哪怕是高级语言编写的程序,函数”调用处理也是通过把程序计数器的值设定成函数的存储地址来实现的。不过,这和条件分支、循环的机制有所不同,因为单纯的跳转指令无法实现函数的调用。函数的调用需要在完成函数内部的处理后,处理流程再返回到函数调用点(函数调用指令的下一个地址)。因此,如果只是跳转到函数的入口地址,处理流程就不知道应该返回至哪里了。

图1-7是给变量a和b分别代入123和456后,将其赋值给参数来调用MyFunc函数的C语言程序。图中的地址是将C语言编译成机器语言后运行时的地址。由于1行C语言程序在编译后通常会变成多行的机器语言,所以图中的地址是离散的。函数调用使用的是call指令,而不是跳转指令。在将函数的入口地址设定到程序计数器之前,call指令会把调用函数后

要执行的指令地址存储在名为栈 的主存内。函数处理完毕后,再通过函数的出口来执行return命令。return命令的功能是把保存在栈中的地址设定到程序计数器中。如图1-7所示,MyFunc函数被调用之前,0154地址保存在栈中。MyFunc函数的处理完毕后,栈中的0154地址就会被读取出来,然后再被设定到程序计数器中(图1-8)。

 

标签:调用,函数,程序,计数器,地址,指令,机制
From: https://www.cnblogs.com/2674308160-lucky/p/17001531.html

相关文章

  • C++:构造函数与拷贝控制
    什么是构造函数构造函数(constructor)是类的一种特殊的成员函数,它被用于控制类的初始化过程、初始化对象的数据成员。无论何时只要类的对象被创建,都会执行构造函数,不同的初......
  • python:函数1
    函数:是组织好的,可重复使用的,用来实现特定功能的代码段。为了得到一个针对特定需求、可供重复利用的代码段提高程序的复用性,减少重复性代码,提高开发效率     ......
  • python:函数2
             ......
  • SpringBoot2.x系列教程79--SpringBoot整合Web Service实现远程接口调用
    SpringBoot2.x系列教程79--SpringBoot整合WebService实现远程接口调用作者:一一哥上一章节中,我带大家学习了WebService的理论知识,接下来在本节中,我带大家实现SpringBoot中......
  • 函数
    前言:在了解循环语句之后,我们开始了解函数,函数是C语言学习的重中之重,函数就相当于C语言代码的工具,可以极大的方便我们编程前提回顾:在了解函数之前,我们先练习一下循环的一道经......
  • MinGW编译x264,VC中调用libx264.dll
    1.下载并按照MinGW,最好就缺省按照   http://sourceforge.net/projects/...ler/mingw-get-inst/  把C:\MinGW\bin添加到PATH中(dos命令行PATH%PATH%;新目录;)2.......
  • 获取当前函数名 __FUNCTION__ 的使用
    vs项目中见过这种获取当前函数名的调用。觉得挺方便的就记录一下。==============================================================转载地址:http://blog.csdn.net/daf......
  • ramda- 函数式编程库
    npminstallramdaimport*asRfrom'ramda'R.and(true,true);//=>trueR.and(true,false);//=>falseR.and(false,true);//=>falseR.and(false,false......
  • Oracle函数汇总
      SQL函数日期函数:可以进行算术运算 SYSDATE返回系统日期selectsysdatefromdual;ADD_MONTHS(<d>,<i>)返回日期d加上i个月后的新日期(i正可负)。......
  • 关于gets函数和scanf函数
    关于gets函数和scanf函数,都会在末尾上加‘\0’的,要不然字符串就无法结束了。他们的不同在于,scanf在碰到缓冲区的空字符时(TAB,空格,换行,回车)时会自动截断并添加0.而gets函......