int i = 0
00B417BE mov dword ptr [i],0
int c
i++
00B417C5 mov eax,dword ptr [i]
00B417C8 add eax,1
00B417CB mov dword ptr [i],eax
++i
00B417CE mov eax,dword ptr [i]
00B417D1 add eax,1
00B417D4 mov dword ptr [i],eax
c = i++
00B417D7 mov eax,dword ptr [i]
00B417DA mov dword ptr [c],eax
00B417DD mov ecx,dword ptr [i]
00B417E0 add ecx,1
00B417E3 mov dword ptr [i],ecx
c = ++i
00B417E6 mov eax,dword ptr [i]
00B417E9 add eax,1
00B417EC mov dword ptr [i],eax
00B417EF mov ecx,dword ptr [i]
00B417F2 mov dword ptr [c],ecx
发现i++ 和++i的反汇编代码步骤一样,都是三步骤:
都是
1、先将i放到累加器中(eax累加器),
2、然后对累加器中的数进行+1,
3、然后将累加器中的结果给i
而将它与表达式放在一起后,就结果不同了
c = i++;
1、将i的值放到累加器中,
2、将累加器中的值 给 c
3、将i的值放到 计数器中(ecx)
4、计数器加1
5、将计数器中的值 给i
c = ++i
1、将i的值放到累加器中,
2、将累加器中的值加1
3、将累加器中的值 给 i
4、将 i的值给 计数器(ecx)中
5、将计数器中的值给c
1、
2、
3、
4、
5、
6、
7、