VS2010中的printf有bug,该如何解决

VS2010中的printf有bug
小弟学过一点16位汇编,现在刚学了2天C语言,根据朋友反映,在VS2010中发现如下问题,由于我系C刚学2天的新手,有分析不到位的地方,请大侠们批评指正。

printf("%d,%d,%d,%d,%d,%d\t\t",++i,--i,i++,i--,-i++,-i--);
在这个函数中,若设 i初始为8
则输出结果为 8,8,7,8,-7,-8 

我们在调试中,将printf("%d,%d,%d,%d,%d,%d\t\t",++i,--i,i++,i--,-i++,-i--);反汇编,得到如下代码:
011C34A5 mov eax,dword ptr [i]  
011C34A8 neg eax  
011C34AA mov dword ptr [ebp-0D0h],eax  
011C34B0 mov ecx,dword ptr [i]  
011C34B3 sub ecx,1  
011C34B6 mov dword ptr [i],ecx
  
011C34B9 mov edx,dword ptr [i]  
011C34BC neg edx  
011C34BE mov dword ptr [ebp-0D4h],edx  
011C34C4 mov eax,dword ptr [i]  
011C34C7 add eax,1  
011C34CA mov dword ptr [i],eax
  
011C34CD mov ecx,dword ptr [i]  
011C34D0 mov dword ptr [ebp-0D8h],ecx  
011C34D6 mov edx,dword ptr [i]  
011C34D9 sub edx,1  
011C34DC mov dword ptr [i],edx
  
011C34DF mov eax,dword ptr [i]  
011C34E2 mov dword ptr [ebp-0DCh],eax  
011C34E8 mov ecx,dword ptr [i]  
011C34EB add ecx,1  
011C34EE mov dword ptr [i],ecx 

 
011C34F1 mov edx,dword ptr [i]  
011C34F4 sub edx,1  
011C34F7 mov dword ptr [i],edx  
011C34FA mov eax,dword ptr [i]  
011C34FD add eax,1  
011C3500 mov dword ptr [i],eax  
011C3503 mov esi,esp  
011C3505 mov ecx,dword ptr [ebp-0D0h] 8
011C350B push ecx  
011C350C mov edx,dword ptr [ebp-0D4h]  
011C3512 push edx  
011C3513 mov eax,dword ptr [ebp-0D8h]  
011C3519 push eax  
011C351A mov ecx,dword ptr [ebp-0DCh]  
011C3520 push ecx  
011C3521 mov edx,dword ptr [i]  
011C3524 push edx  
011C3525 mov eax,dword ptr [i]  
011C3528 push eax  
011C3529 push offset string "%d\n%d\n%d\n" (11C59F8h)  
011C352E call dword ptr [__imp__printf (11C82B0h)]  
011C3534 add esp,1Ch  
011C3537 cmp esi,esp  
011C3539 call @ILT+295(__RTC_CheckEsp) (11C112Ch) 

分析如下:
从反汇编代码来看,vs2010中对printf函数的上述参数中,是从右到左运算的,即先运算-i--,然后-i++,依次到左,对上述汇编代码分别分析如下
(1) -i-- 
011C34A5 mov eax,dword ptr [i]  
011C34A8 neg eax  
011C34AA mov dword ptr [ebp-0D0h],eax  
011C34B0 mov ecx,dword ptr [i]  
011C34B3 sub ecx,1  
011C34B6 mov dword ptr [i],ecx
先求变量的相反数,保存变量用于输出,然后将初始变量-1(i=7),保存到变量里,用于下次计算;
(2)-i++
011C34B9 mov edx,dword ptr [i]  
011C34BC neg edx  
011C34BE mov dword ptr [ebp-0D4h],edx  
011C34C4 mov eax,dword ptr [i]  
011C34C7 add eax,1  
011C34CA mov dword ptr [i],eax 
同样道理,无非最后是+1,i=8
(3)i--
011C34CD mov ecx,dword ptr [i]  
011C34D0 mov dword ptr [ebp-0D8h],ecx  
011C34D6 mov edx,dword ptr [i]  
011C34D9 sub edx,1  
011C34DC mov dword ptr [i],edx  
上一步的i=8吧,这里就是,将8保存用于显示,然后-1,保存用于下次运算(i=7)
(4)i++
011C34DF mov eax,dword ptr [i]  
011C34E2 mov dword ptr [ebp-0DCh],eax  
011C34E8 mov ecx,dword ptr [i]  
011C34EB add ecx,1  
011C34EE mov dword ptr [i],ecx