C语言在函数调用的过程中的参数到底是怎么传递的,传值和传参数的差别在哪里,我从最简单的过程开始,让自己复习一下。
如果我们不采用方法调用,正常的计算过程是这样的。
int a = 9; int b =8; int c = a+b;
其对应的汇编代码如下:
int a = 9; 000913BE mov dword ptr [a],9 int b =8; 000913C5 mov dword ptr [b],8 int c = a+b; 000913CC mov eax,dword ptr [a] 000913CF add eax,dword ptr [b] 000913D2 mov dword ptr [c],eax
这个过程都非常简单,也很容易理解,计算的过程没有额外的开销。下面把a+b的过程封装成一个函数int add(int,int);
对应的汇编代码如下:
int c = add(a,b);这个是调用前的准备工作,将参数从右到左压入堆栈 009617EC mov eax,dword ptr [b] //将b压入堆栈 009617EF push eax 009617F0 mov ecx,dword ptr [a] //将a压入堆栈 009617F3 push ecx 009617F4 call add (09611D6h) //调用add方法 009617F9 add esp,8 009617FC mov dword ptr [c],eax
下面是add的方面内部的过程
009613A0 push ebp 009613A1 mov ebp,esp 009613A3 sub esp,0C0h 009613A9 push ebx 009613AA push esi 009613AB push edi 009613AC lea edi,[ebp-0C0h] 009613B2 mov ecx,30h 009613B7 mov eax,0CCCCCCCCh 009613BC rep stos dword ptr es:[edi]
return a+b; 009613BE mov eax,dword ptr [a] 009613C1 add eax,dword ptr [b]
相关推荐
函数调用的过程实际上也就是一个中断的过程,那么C++中到底是怎样实现一个函数的调用的呢?参数入栈、函数跳转、保护现场、回复现场等又是怎样实现的呢?本文将对函数调用的过程进行深入的分析和详细解释,并在VC ...
【应聘笔记系列】堆栈、栈帧与函数调用过程分析,C-C++堆栈指引
堆栈帧,函数调用,堆栈切换 函数调用过程种种细节分析
详细介绍了read()函数在linux系统中调用过程。从用户层到文件系统层到通用块层到page cache层只到驱动层设备层的过程。
函数调用过程深入分析,在函数的调用过程中,会用到call指令,在函数被调用时,会先做如下一些工作
CSDN 博文,对栈帧的概念以及函数调用过程栈的变化做了详细的分析!
C语言函数调用过程中变量的同名问题的解决
自动生成c++函数调用关系图,里面包含了所有要用到的软件,一站式服务; 通过本人亲测的使用总结; 还有使用到的配置文件(c++的),实在不会配置可以直接使用; 改一改配置文件,应该还可以生成c,java,c#语言的调用...
对vlc-android打开rtsp流媒体文件的函数调用过程进行了分析,调用保存图为PNG格式
详细解释了函数调用过程中堆栈的处理过程,主要对新手来说可以通过这个提升一下自己对函数调用过程的了解
【Android 11】【Bluetooth模块】Bluetooth打开函数调用流程图
oracle函数调用存储过程.doc
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
remote-function底层使用命令管道进行通讯,内置的流程完成了函数参数和返回值的序列化过程。且大部分的参数和返回值都可以使用内置的(反)序列化方法,对于一些复杂的数据类型,需要自己(反)序列化。 项目首页...
1. x86 Instruction Set Reference 2. x86 Disassembly/Functions and Stack Frames 3
java调用oracle存储过程或者函数
详细介绍了main函数如何调用子函数的过程,非常的经典
这篇文章主要介绍了python函数定义和调用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们可以创建一个函数来列出费氏数列 >>> def fib(n): # ...
举例说明构造函数的调用过程,定义类及其派生类,构造函数对类成员初始化
编程中有时会遇到一个系统异常java.lang.StackOverflowError,栈溢出错误,要理解这个错误,我们需要理解函数调用的实现机制,本文就谈谈它的基本原理 ...