不知道vc想干嘛,翻译这么一段汇编,该怎么处理
不知道vc想干嘛,翻译这么一段汇编不废话,看代码:void f(int& val){val++}Assembly code6:val++ //c++中
不知道vc想干嘛,翻译这么一段汇编
不废话,看代码:
void f(int& val)
{
val++;
}
Assembly code6: val++; //c++中的00401048 mov eax,dword ptr [ebp+8]0040104B mov ecx,dword ptr [eax]0040104D add ecx,100401050 mov edx,dword ptr [ebp+8]00401053 mov dword ptr [edx],ecx7:8: }
[ebp+8]保存 参数val的值
然后进入函数体, 执行va++;
要是我写汇编的话,
我直接:
mov eax,[ebp+8];
add eax,1;
mov [ebp+8],eax;
即可
不知道 那段汇编搞什么??
eax保存了[val+8]的地址,ecx又保存了dword ptr [eax] 即ecx保存了[val+8]这块内存的内容!!!
然后 add ecx,1;
接着:又把[val+8]内存的地址放到edx中!!
然后把修改后的ecx的值放到[ebp+8]中!!
不知道vc搞什么,。 搞了这么复杂,到底想干什么???
[解决办法]你开优化了么?
生成的没错啊。因为你是传引用进去的实际第一个参数是val的地址。
[解决办法][解决办法][ebp+8]存的是变量的地址,所以inc [ebp+8] 是不行的,至少要两句:
mov eax,[ebp+8]
inc dword ptr [eax]
[解决办法]引用本质上就是指针,所以只看汇编是看不出来的