Цитата(мисс_граффити @ 23.07.2007 0:06) 

 нашла статейку по этому поводу, разобралась окончательно.
спасибо большое! 
Темка устарела, но в догонку оставлю пост.
Вот результат дизассемблирования строки i = ++i + ++i (BDS2006, без какой либо оптимизации)
Код
Unit1.c.12: i = ++i + ++i;
0040117B FF45FC           inc dword ptr [ebp-$04]
0040117E FF45FC           inc dword ptr [ebp-$04]
00401181 8B45FC           mov eax,[ebp-$04]
00401184 0145FC           add [ebp-$04],eax
Видно,что сперва компилер выполнил ++i 2 раза, потом сложил и результат поместил снова в i.
В результате получаем 14.
Для Vs2005 можно увидеть такой код (без оптимизации)
Код
    i = ++i + ++i;
00401BFD  mov         eax,dword ptr [i] 
00401C00  add         eax,1 
00401C03  mov         dword ptr [i],eax 
00401C06  mov         ecx,dword ptr [i] 
00401C09  add         ecx,1 
00401C0C  mov         dword ptr [i],ecx 
00401C0F  mov         edx,dword ptr [i] 
00401C12  add         edx,dword ptr [i] 
00401C15  mov         dword ptr [i],edx 
с оптимизацией всю кухную компилер заменил на инструкцию lea, i находится в eax
Код
i = ++i + ++i;
00401019  lea         eax,[eax+eax+4]
в обоих случаях получаем 14
Для C# в той же Vs2005 получим 13, вот листинг дизассемблирования:
Код
            int i = 5;
00000027  mov         esi,5 
            i = ++i + ++i;
0000002c  inc         esi  
0000002d  mov         edi,esi 
0000002f  inc         esi  
00000030  add         esi,edi