写了个小程序,在MSVC 2008 和 gcc 3.4.4 ( under cygwin)下面跑了一下,
发现结果不一样。
代码如下,非常简单:
//
------------ source code -------------------------------
#include "stdio.h"
int main()
{
#if 1
#endif
}
------------------- asm code in MSVC --------------------------------------------------
// in MSVC, their asm code are the same. And before get back data, the operation is:
表示加1了。
--------------------------------------------------------
004113C5
mov
eax,dword ptr [i]
004113C8
add
eax,1
004113CB
mov
dword ptr [i],eax
004113CE
mov
ecx,dword ptr [i]
004113D1
imul
ecx,dword ptr [i]
004113D5
mov
dword ptr [i],ecx
004113D8
mov
edx,dword ptr [i]
004113DB add edx,1
004113DE
mov
dword ptr [i],edx
004113E1
mov
esi,esp
004113E3
mov
eax,dword ptr [i]
004113E6
push
eax
004113E7
push
offset string "i=%d\r\n" (41573Ch)
004113EC
call
dword ptr [__imp__printf (4182BCh)]
004113F2
add
esp,8
004113F5
cmp
esi,esp
004113F7
call
@ILT+310(__RTC_CheckEsp) (41113Bh)
004113FC
mov
dword ptr [i],0
00411403
mov
eax,dword ptr [i]
00411406
add
eax,1
00411409
mov
dword ptr [i],eax
0041140C
mov
ecx,dword ptr [i]
0041140F
imul
ecx,dword ptr [i]
00411413
mov
dword ptr [i],ecx
00411416
mov
edx,dword ptr [i]
00411419 add edx,1
0041141C
mov
dword ptr [i],edx
-----------------------------------------------------------
在最新的编译器上:
1.
2.