首页 > 汇编语言 > 汇编与C语句 阅读:57,774

函数传参与汇编

C语言中调用函数的时候,将实参数据传递给函数的方式,可以分为传值,传指针,以及C++中的传引用。这里所谓的传值,传指针和传引用都是针对实参来说的,也就是传实参的值,实参的指针,实参的引用。

4.3.1 传值

传值无法改变实参的值,因为传值的情况下,存放在栈上的形参只是实参值的一个拷贝,无法改变实参。

 

void func1(int x)

{

    x=1;

}

int a=0;

func1(a);

010414A5  mov       eax,dword ptr [a] //a的值放入eax中,然后把eax入栈

010414A8  push       eax

010414A9  call        func1 (10411D6h)

010414AE  add        esp,4

4.3.2 传地址

下面是传指针的函数定义方式,形参x是一个指向整数类型数据的地址。在函数内部通过*运算符来引用实参。

void func2(int *x)

{

    *x=2;

}

 

int a=0;

func2(&a);

010414B1  lea         eax,[a] //a的地址传入eax中,然后把eax入栈

010414B4  push        eax 

010414B5  call         func2 (104100Ah)

010414BA  add         esp,4

4.3.3 传引用

下面是在C++中的传引用调用方式,注意,形参部分使用的是&,而在函数内部,可以直接把形参当做实参来使用,此时形参就是对实参的一个引用。传引用实际上也是传的实参的地址,是可以直接修改实参的。下面是在main函数里直接通过传引用的方式调用函数的方式:

void func3(int &x)

{

    x=3;

}

 

int a=0;

func3(a);

010414BD  lea        eax,[a] //在汇编层与传指针的方法完全一样

010414C0  push       eax 

010414C1  call        func3 (104102Dh)

010414C6  add        esp,4

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注