首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-03-11 
不知道vc想干嘛,翻译这么一段汇编不废话,看代码:void f(int& val){val++}Assembly code6:val++ //c++中

不知道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]

[解决办法]
引用本质上就是指针,所以只看汇编是看不出来的

热点排行