#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){就会出现你期望的汇编代码
其次,为什么是movl $3, -4(%ebp)和movl $4, -8(%ebp)呢?貌似没理由啊
仔细分析就知道了:
movl %esp, %ebp #把栈顶指针赋给ebp所以-4(%ebp)就是第一个局部变量,-8(%ebp)是第二个局部变量。
怎么int a,b变成了局部变量了?? 因为fun函数虽然传了参数但是参数直接被覆盖了(根本就没用),或者把代码改成这样就明白了:
void fun(int *a, int *b) {是gcc