当前位置: 代码迷 >> 汇编语言 >> 不知道vc想干嘛,翻译这么一段汇编,该怎么处理
  详细解决方案

不知道vc想干嘛,翻译这么一段汇编,该怎么处理

热度:5878   发布时间:2013-02-26 00:00:00.0
不知道vc想干嘛,翻译这么一段汇编
不废话,看代码:

void f(int& val)
{
val++;

}

Assembly code
6:        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的地址。
------解决方案--------------------------------------------------------
探讨
要是我写汇编的话,
我直接:
mov eax,[ebp+8];
add eax,1;
mov [ebp+8],eax;
即可

------解决方案--------------------------------------------------------
[ebp+8]存的是变量的地址,所以inc [ebp+8] 是不行的,至少要两句:
mov eax,[ebp+8]
inc dword ptr [eax]

------解决方案--------------------------------------------------------
引用本质上就是指针,所以只看汇编是看不出来的
  相关解决方案