|
发表于 2013-2-11 14:04:12
|
显示全部楼层
看下vs2010的反汇编代码吧!
可能就知道为什么i3的值是9了
- int i=8;
- 002313CE mov dword ptr [i],8 //把8放入i的内存单元
- printf("i1=%d\n",i);
- 002313D5 mov esi,esp
- 002313D7 mov eax,dword ptr [i] //把i储存单元的值放到eax中
- 002313DA push eax
- 002313DB push offset string "i1=%d\n" (23574Ch)
- 002313E0 call dword ptr [__imp__printf (2382D4h)]
- 002313E6 add esp,8
- 002313E9 cmp esi,esp
- 002313EB call @ILT+300(__RTC_CheckEsp) (231131h)
- printf("i2=%d\n",-i++);
- 002313F0 mov eax,dword ptr [i] ////把i储存单元的值放到eax中
- 002313F3 neg eax //这里并没有改变i地址处的值,只是把寄存器里的值做了取反操作!
- 002313F5 mov dword ptr [ebp-0D0h],eax
- 002313FB mov ecx,dword ptr [i] //把i储存单元的值放到ecx中
- 002313FE add ecx,1 //ecx 加1
- 00231401 mov dword ptr [i],ecx //把ecx放入i的储存单元
- 00231404 mov esi,esp
- 00231406 mov edx,dword ptr [ebp-0D0h]
- 0023140C push edx
- 0023140D push offset string "i2=%d\n" (235744h)
- 00231412 call dword ptr [__imp__printf (2382D4h)]
- 00231418 add esp,8
- 0023141B cmp esi,esp
- 0023141D call @ILT+300(__RTC_CheckEsp) (231131h)
- printf("i3=%d\n",i);
- 00231422 mov esi,esp
- 00231424 mov eax,dword ptr [i] //把i储存单元的值放到eax中
- 00231427 push eax
- 00231428 push offset string "i3=%d\n" (23573Ch)
- 0023142D call dword ptr [__imp__printf (2382D4h)]
- 00231433 add esp,8
- 00231436 cmp esi,esp
- 00231438 call @ILT+300(__RTC_CheckEsp) (231131h)
- }
-
复制代码 所以i3等于9
|
评分
-
查看全部评分
|