FOR est effectivement plus performant ( un MOV en moins à chaque itération).
8: int a = 0;
00401048 mov dword ptr [ebp-4],0
9:
10: for ( int i = 0; i < 4; i++)
0040104F mov dword ptr [ebp-8],0
00401056 jmp main+31h ( 00401061)
00401058 mov eax,dword ptr [ebp-8]
0040105B add eax,1
0040105E mov dword ptr [ebp-8],eax
00401061 cmp dword ptr [ebp-8],4
00401065 jge main+3Fh ( 0040106f)
11: a = i;
00401067 mov ecx,dword ptr [ebp-8]
0040106A mov dword ptr [ebp-4],ecx
0040106D jmp main+28h ( 00401058)
//--------------------------------------------
8: int a = 0;
00401048 mov dword ptr [ebp-4],0
9: int i = 4;
0040104F mov dword ptr [ebp-8],4
10: while ( i--)
00401056 mov eax,dword ptr [ebp-8]
00401059 mov ecx,dword ptr [ebp-8]
0040105C sub ecx,1
0040105F mov dword ptr [ebp-8],ecx
00401062 test eax,eax
00401064 je main+3Eh ( 0040106e)
11: a = i;
00401066 mov edx,dword ptr [ebp-8]
00401069 mov dword ptr [ebp-4],edx
0040106C jmp main+26h ( 00401056)