不知道vc想干嘛,翻译这么一段汇编
时间:2011-11-19
来源:互联网
不废话,看代码:
void f(int& val)
{
val++;
}
Assembly code
[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搞什么,。 搞了这么复杂,到底想干什么???
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,1 00401050 mov edx,dword ptr [ebp+8] 00401053 mov dword ptr [edx],ecx 7: 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搞什么,。 搞了这么复杂,到底想干什么???
作者: qunqun2012 发布时间: 2011-11-19
你开优化了么?
生成的没错啊。因为你是传引用进去的实际第一个参数是val的地址。
生成的没错啊。因为你是传引用进去的实际第一个参数是val的地址。
作者: mydo 发布时间: 2011-11-19
dword ptr这个指令 不是取地址的意思,
我理解错了,汇编都还给老师了。。。。。。。。。。。
这样,,,,,为了说明问题,, 一个是引用,一个不是引用
我贴出主要汇编来:
00401046 rep stos dword ptr [edi]
6: val++;
00401048 mov eax,dword ptr [ebp+8] //[ebp+8]中保存的是参数val的地址
0040104B add eax,1 //放到eax中,然后加1
0040104E mov dword ptr [ebp+8],eax //eax加1后,再次放到val中
7:
8: }
6: val++;
00401048 mov eax,dword ptr [ebp+8]
0040104B mov ecx,dword ptr [eax]
0040104D add ecx,1
00401050 mov edx,dword ptr [ebp+8]
00401053 mov dword ptr [edx],ecx
7:
8: }
光看汇编, 谁能看出,哪个汇编是引用,哪个不是引用来???
附上原因,
我理解错了,汇编都还给老师了。。。。。。。。。。。
这样,,,,,为了说明问题,, 一个是引用,一个不是引用
我贴出主要汇编来:
00401046 rep stos dword ptr [edi]
6: val++;
00401048 mov eax,dword ptr [ebp+8] //[ebp+8]中保存的是参数val的地址
0040104B add eax,1 //放到eax中,然后加1
0040104E mov dword ptr [ebp+8],eax //eax加1后,再次放到val中
7:
8: }
6: val++;
00401048 mov eax,dword ptr [ebp+8]
0040104B mov ecx,dword ptr [eax]
0040104D add ecx,1
00401050 mov edx,dword ptr [ebp+8]
00401053 mov dword ptr [edx],ecx
7:
8: }
光看汇编, 谁能看出,哪个汇编是引用,哪个不是引用来???
附上原因,
引用 1 楼 mydo 的回复:
你开优化了么?
生成的没错啊。因为你是传引用进去的实际第一个参数是val的地址。
你开优化了么?
生成的没错啊。因为你是传引用进去的实际第一个参数是val的地址。
作者: qunqun2012 发布时间: 2011-11-19
6: val++; //c++中的
00401048 mov eax,dword ptr [ebp+8] //ebp+8保存的是val的值,这指令把 val放到eax中
0040104B mov ecx,dword ptr [eax] //把地址等于eax的内存放到ecx中
0040104D add ecx,1 //ecx加1
00401050 mov edx,dword ptr [ebp+8] //ebp+8的内存放到edx
00401053 mov dword ptr [edx],ecx //加1后的ecx放到地址为edx的内存中
7:
8: }
是不是有问题啊,
如果把 ebp+8中的内容理解为 val地址,那么
6: val++; //c++中的
00401048 mov eax,dword ptr [ebp+8] //地址放到eax
0040104B mov ecx,dword ptr [eax] // ebp+8中的内容放到ecx中
0040104D add ecx,1 //加1
00401050 mov edx,dword ptr [ebp+8] //ebp+8的内容 干嘛放到edx???? 这句或许是编译器搞出来的,多余了
00401053 mov dword ptr [edx],ecx //
7:
8: }
00401048 mov eax,dword ptr [ebp+8] //ebp+8保存的是val的值,这指令把 val放到eax中
0040104B mov ecx,dword ptr [eax] //把地址等于eax的内存放到ecx中
0040104D add ecx,1 //ecx加1
00401050 mov edx,dword ptr [ebp+8] //ebp+8的内存放到edx
00401053 mov dword ptr [edx],ecx //加1后的ecx放到地址为edx的内存中
7:
8: }
是不是有问题啊,
如果把 ebp+8中的内容理解为 val地址,那么
6: val++; //c++中的
00401048 mov eax,dword ptr [ebp+8] //地址放到eax
0040104B mov ecx,dword ptr [eax] // ebp+8中的内容放到ecx中
0040104D add ecx,1 //加1
00401050 mov edx,dword ptr [ebp+8] //ebp+8的内容 干嘛放到edx???? 这句或许是编译器搞出来的,多余了
00401053 mov dword ptr [edx],ecx //
7:
8: }
引用楼主 qunqun2012 的回复:
不废话,看代码:
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 ……
不废话,看代码:
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 ……
作者: qunqun2012 发布时间: 2011-11-19
引用楼主 qunqun2012 的回复:
要是我写汇编的话,
我直接:
mov eax,[ebp+8];
add eax,1;
mov [ebp+8],eax;
即可
要是我写汇编的话,
我直接:
mov eax,[ebp+8];
add eax,1;
mov [ebp+8],eax;
即可
LZ,你也是放屁脱裤子----多此一举,你的三句要我写就一句:
inc [ebp+8]
;------------------------
学汇编/反汇编,最大的好处之一就是让我们清楚,高级语言写的代码,到底是么意思。
作者: gsy999 发布时间: 2011-11-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28