反编问题
#include <iostream>

int main()
{

}



0x4013e0 push ebp
0x4013e1 mov  ebp,esp
0x4013e3 sub  esp,0x8\\留8个字节的空间是main()的参数空间吗?
0x4013e6 and  esp,0xfffffff0\\为什么要要进行这一步,问了许多人都说不明白???
0x4013e9 mov  eax,0x0\\从这里
0x4013ee add  eax,0xf
0x4013f1 add  eax,0xf
0x4013f4 shr  eax,0x4\\到这里都看不明白,原程序是空的,为什么进行这么多
                      无谓的操作;它是什么意思?
0x4013f7 shl  eax,0x4\\这里也一样,不知道是什么意思?
0x4013fa mov  DWORD PTR [ebp-4],eax\\??
0x4013fd mov  eax,DWORD [ebp-4]\\???
0x401400 call 0x40cff0 <_alloca>
0x401405 call 0x40cc90 <_main>
0x40140a mov  eax,0x0
0x40140f leave 
0x401410 ret


同样,当我用vc6.0调试时,却时这样的,为什么是sub esp,40h

    int main()
4:    {
00401030   push        ebp
00401031   mov         ebp,esp
00401033   sub         esp,40h
00401036   push        ebx
00401037   push        esi
00401038   push        edi
00401039   lea         edi,[ebp-40h]\\???
0040103C   mov         ecx,10h\\???
00401041   mov         eax,0CCCCCCCCh\\???
00401046   rep stos    dword ptr [edi]
5:    return 0;
肯请给与详细答案,谢谢