懂C++和汇编的朋友进,该怎么处理

懂C++和汇编的朋友进
参数传递的过程不是很明白
我们还没学到汇编语言,看的不是很明白
麻烦大家解释下汇编代码,谢谢大家!
C/C++ code

//C++代码:
#include<iostream>

using namespace std;

class A
{
public:
    A(int x = 0) : a(x){cout<<"normal"<<endl;}
    A(const A &ref) : a(ref.a){cout<<"copy"<<endl;}
    int a;
};

void test(A x)
{
}

int main()
{
    A a;

    test(a);
    system("pause");
    return 0;
}


Assembly code

//汇编代码:
17:   int main()
18:   {
004011B0   push        ebp
004011B1   mov         ebp,esp
004011B3   sub         esp,48h
004011B6   push        ebx
004011B7   push        esi
004011B8   push        edi
004011B9   lea         edi,[ebp-48h]
004011BC   mov         ecx,12h
004011C1   mov         eax,0CCCCCCCCh
004011C6   rep stos    dword ptr [edi]
19:       A a;
004011C8   push        0
004011CA   lea         ecx,[ebp-4]                //ecx传递this指针?
004011CD   call        @ILT+10(A::A) (0040100f)   //构造局部对象a
20:
21:       test(a);
004011D2   push        ecx                        //传递拷贝构造函数的引用参数 即对象a的地址
004011D3   mov         ecx,esp                    //这条语句是干嘛的? 为形参分配空间?
004011D5   lea         eax,[ebp-4]
004011D8   push        eax                        //这条语句的作用是什么? 构造形参的话this指针有了,参数也有了,怎么此处又将a的地址入栈? 
004011D9   call        @ILT+150(A::A) (0040109b)  //在ecx指向的空间以已经压栈的a的地址做引用参数拷贝构造形参?
004011DE   call        @ILT+180(test) (004010b9)  //
004011E3   add         esp,4
22:       system("pause");
004011E6   push        offset string "pause" (0043101c)
004011EB   call        system (00409140)
004011F0   add         esp,4
23:       return 0;
004011F3   xor         eax,eax
24:   }


13:   void test(A x)
14:   {
00401180   push        ebp
00401181   mov         ebp,esp
00401183   sub         esp,40h
00401186   push        ebx
00401187   push        esi
00401188   push        edi
00401189   lea         edi,[ebp-40h]
0040118C   mov         ecx,10h
00401191   mov         eax,0CCCCCCCCh
00401196   rep stos    dword ptr [edi]
15:   }
00401198   pop         edi
00401199   pop         esi
0040119A   pop         ebx
0040119B   mov         esp,ebp
0040119D   pop         ebp
0040119E   ret



------解决方案--------------------
现在赶快亡羊补牢还来得及
------解决方案--------------------
自己注释了那么多了,也差不多了吧
------解决方案--------------------
汇编。。。不懂。。曾经就很厌恶这门科,,想当年差点挂科。。杯具
------解决方案--------------------
汇编。。。不懂。。曾经就很厌恶这门科,,想当年差点挂科。。杯具
------解决方案--------------------
不是很懂,C到汇编还好说点,C++就更晕了
------解决方案--------------------
Assembly code
 
19:    A a;
004011C8  push    0              ;实际要调用A(int x = 0)这个构造函数,
                        ;这个是默认参数入栈
004011CA  lea    ecx,[ebp-4]        ;将a对象的地址存入ecx,vc一般this存入ecx
      ;gcc中this作为最后一参数入栈的,显然ebp-4 ~ebp这段空间就是a的存储空间
004011CD  call    @ILT+10(A::A) (0040100f)  //构造局部对象a
20:
21:    test(a);
004011D2  push    ecx            ;将ecx入栈保存
004011D3  mov    ecx,esp          ;将esp保存到ecx,说明编译器打算将esp-4~esp
    ;作为test函数中参数a对应的内存,test传参时要调用A的拷贝构造函数生成一个临时对象