|
|
发表于 2012-1-11 15:59:19
|
显示全部楼层
我是用VC 6.0 从反汇编看
p = (i++)+(i++)+(i++);
0040D466 mov eax,dword ptr [ebp-4]
0040D469 add eax,dword ptr [ebp-4]
0040D46C add eax,dword ptr [ebp-4]
0040D46F mov dword ptr [ebp-0Ch],eax
0040D472 mov ecx,dword ptr [ebp-4]
0040D475 add ecx,1
0040D478 mov dword ptr [ebp-4],ecx
0040D47B mov edx,dword ptr [ebp-4]
0040D47E add edx,1
0040D481 mov dword ptr [ebp-4],edx
0040D484 mov eax,dword ptr [ebp-4]
0040D487 add eax,1
0040D48A mov dword ptr [ebp-4],eax
一开始直接就取了i 的值 加了3次 再把该值p保存起来 再进行i 的三次自加
而下面的
q = (++j)+(++j)+(++j);
0040D48D mov ecx,dword ptr [ebp-8]
0040D490 add ecx,1
0040D493 mov dword ptr [ebp-8],ecx
0040D496 mov edx,dword ptr [ebp-8]
0040D499 add edx,1
0040D49C mov dword ptr [ebp-8],edx
0040D49F mov eax,dword ptr [ebp-8]
0040D4A2 add eax,dword ptr [ebp-8]
0040D4A5 mov ecx,dword ptr [ebp-8]
0040D4A8 add ecx,1
0040D4AB mov dword ptr [ebp-8],ecx
0040D4AE add eax,dword ptr [ebp-8]
0040D4B1 mov dword ptr [ebp-10h],eax
取出j 值 先自加1 再存放回去 又取出J值 再自加1 存放回去 取出j 值 这时候为7了 使j+j =14 存放在eax寄存器 再取出j 把j自加1 j = 8 把q = eax+ j = 22 |
|