|
发表于 2013-2-6 23:03:25
|
显示全部楼层
vc++2010 反汇编代码
- void main()
- {
- 00A813C0 push ebp
- 00A813C1 mov ebp,esp
- 00A813C3 sub esp,0F0h
- 00A813C9 push ebx
- 00A813CA push esi
- 00A813CB push edi
- 00A813CC lea edi,[ebp-0F0h]
- 00A813D2 mov ecx,3Ch
- 00A813D7 mov eax,0CCCCCCCCh
- 00A813DC rep stos dword ptr es:[edi]
- int i=5,j=6,p,q;
- 00A813DE mov dword ptr [i],5 //把5移动到i的储存单元 ,i=5
- 00A813E5 mov dword ptr [j],6 //把5移动到j的储存单元 ,j=6
- p=(i++)+(i++)+(i++);
- 00A813EC mov eax,dword ptr [i] //把i的储存单元的值放到eax ,eax的值为5
- 00A813EF add eax,dword ptr [i] //把i的储存单元的值取出 + eax中的值放到eax中 ,eax的值为10
- 00A813F2 add eax,dword ptr [i] //把i的储存单元的值取出 + eax中的值放到eax中 ,eax的值为15
- 00A813F5 mov dword ptr [p],eax //把eax的值放到存放p的地址储存单元 ,p=15
- 00A813F8 mov ecx,dword ptr [i] //把i的储存单元的值放到ecx ,ecx的值为5
- 00A813FB add ecx,1 //ecx的值加一 ,ecx的值为6
- 00A813FE mov dword ptr [i],ecx //把ecx的值放到存放i的地址储存单元 ,i=6
- 00A81401 mov edx,dword ptr [i] //把i的储存单元的值放到edx ,edx的值为6
- 00A81404 add edx,1 //edx的值加一 ,edx的值为7
- 00A81407 mov dword ptr [i],edx //把edx的值放到存放i的地址储存单元 ,i=7
- 00A8140A mov eax,dword ptr [i] //把i的储存单元的值放到eax ,eax的值为7
- 00A8140D add eax,1 //eax的值加一 ,eax的值为8
- 00A81410 mov dword ptr [i],eax //把eax的值放到存放i的地址储存单元 ,i=8
- q=(++j)+(++j)+(++j);
- 00A81413 mov eax,dword ptr [j] //把j的储存单元的值放到eax ,eax的值为6
- 00A81416 add eax,1 //eax的值加一 ,eax的值为7
- 00A81419 mov dword ptr [j],eax //把eax的值放到存放j的地址储存单元 ,j=7
- 00A8141C mov ecx,dword ptr [j] //把j的储存单元的值放到ecx , ecx的值为7
- 00A8141F add ecx,1 //ecx的值加一 ,ecx的值为8
- 00A81422 mov dword ptr [j],ecx //把ecx的值放到存放j的地址储存单元 ,j=8
- 00A81425 mov edx,dword ptr [j] //把j的储存单元的值放到edx , edx的值为8
- 00A81428 add edx,1 //edx的值加一 ,edx的值为9
- 00A8142B mov dword ptr [j],edx //把edx的值放到存放j的地址储存单元 ,j=9
- 00A8142E mov eax,dword ptr [j] //把j的储存单元的值放到eax ,eax的值为9
- 00A81431 add eax,dword ptr [j] //把j的储存单元的值取出 + eax中的值放到eax中 ,eax的值为18
- 00A81434 add eax,dword ptr [j] //把j的储存单元的值取出 + eax中的值放到eax中 ,eax的值为27
- 00A81437 mov dword ptr [q],eax //把eax的值放到存放q的地址储存单元 ,q=15
- printf("%d,%d,%d,%d\n",p,q,i,j);
复制代码
所以在可以看出在vs2010的编译环境下编译规则是:
++放在变量后面是最后执行的 即5+5+5 = 15 之后i的值再累加三次 i=8 (6~8)
++放在变量前面是最先执行的,j的值先累加3次 j=9 (7~9) 然后再 9+9+9 = 27
而vc++6.0的结果也不同,这++ 后者--主要看编译器的编译原理
估计你使用是gcc或者dev
|
|