汇编,movl指令,求指教!

#include <stdio.h>void fun(int a,int b){ a=3; b=4;}int main(){ int a=100; int b=200; fun(a,b); return 0;}

这个问题蛮有意思!

首先,如果你把fun函数改成

void fun(int a,int b){
    int c = a + b;
}

就会出现你期望的汇编代码

其次,为什么是movl $3, -4(%ebp)和movl $4, -8(%ebp)呢?貌似没理由啊

仔细分析就知道了:

movl %esp, %ebp #把栈顶指针赋给ebp
subl $16, %esp  #esp向上移动16个单位,相当于开辟了4个局部int,这时的ebp就相当于栈底了

所以-4(%ebp)就是第一个局部变量,-8(%ebp)是第二个局部变量。

怎么int a,b变成了局部变量了?? 因为fun函数虽然传了参数但是参数直接被覆盖了(根本就没用),或者把代码改成这样就明白了:

void fun(int *a, int *b) {
   *a = 3;
   *b = 4;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-17
你用的是什么编译器呀。追问

是gcc