|
发表于 2014-7-24 21:19:42
|
显示全部楼层
引用的是你的连接的汇编代码
4: int i = 6;
00401028 mov dword ptr [ebp-4],6 //先将6压到栈中,相当于给i赋值为6,栈地址为[ebp-4],简单的理解就是[ebp-4]=i
5: int k = (++i) + (++i) + (++i);
0040102F mov eax,dword ptr [ebp-4] //将[ebp-4]里的值传给eax,也就是eax=6
00401032 add eax,1 //add加法运算,也就是自增1 结果是eax=7
00401035 mov dword ptr [ebp-4],eax //将eax=7的值继续压到栈中的[ebp-4] 地址里
00401038 mov ecx,dword ptr [ebp-4] //将[ebp-4] 里的值传给ecx.结果ecx=7
0040103B add ecx,1 //自增运算ecx=8
0040103E mov dword ptr [ebp-4],ecx //将ecx=8压入栈,地址还是[ebp-4] //到这里相当于计算了前两个++i,这个时候i的值已经变成8
00401041 mov edx,dword ptr [ebp-4] //这里是将[ebp-4] 中的值传递给edx,相当于edx=8
00401044 add edx,dword ptr [ebp-4] ; //这个地方相当于edx=edx+[ebp-4] ,也就是edx=8+8=16.到此为止就相当于计算 (++i) + (++i)
00401047 mov eax,dword ptr [ebp-4] ; 再次将i的值赋值给eax
0040104A add eax,1 ; eax自增1 eax = 9
0040104D mov dword ptr [ebp-4],eax ;//将寄存器eax中的数字继续放回栈中。
00401050 add edx,dword ptr [ebp-4] ; /相当于edx=edx+[ebp-4].初始edx=16 [ebp-4]=9,结果edx=25
00401053 mov dword ptr [ebp-8],edx ; edx -> k 所以,k = 25
|
|