这段汇编代码是不是有病呀
看了谭文邵坚强的<天书夜读-从汇编语言到Windows内核编程>,其中有这么一段:
void myfunction(int a,int b)
{int c=a+b;
}
用VC做的反汇编代码
void myfunction(int a,int b)
{push ebp
mov ebp,esp
sub esp,0cch
push ebx
push esi
push edi
lea edi,[ebp-0cch]
mov ecx,33h
mov eax,0cccccccch
rep stos dword ptr [edi]
int c=a+b
mov eax,dword ptr[a]
add eax,dword ptr[b]
mov dword ptr[c],eax
}
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret
其中有一段非常不明白,那就是
sub esp,0cch
push ebx
push esi
push edi
lea edi,[ebp-0cch]
mov ecx,33h
mov eax,0cccccccch
rep stos dword ptr [edi]
这一段,大致意思是在堆栈中腾出一个区域用来保存局部变量,也就是常说的所谓局部变量保存在栈空间中,但奇怪的是总共三个局部变量,却腾出了0cch=204个字节的空间,能存大约51个变量,这是不是也太浪费了呀,为什么要这样呀