Вот решил написать в этом разделе хоть одну темку. На asm-е давненько уже не кодирую, разве что для сверх оптимизации с приминением MMX, SSE и 3DNow!. Почему сверх? Да потому, что самая эффективная оптимизация - это оптимизация алгоритма. Но ближе к теме: недавно я столкнулся с такой вот интересной интерпретацией одного и того же тестового кода, но на разных языках:
Код:
int i = 2;
int res = ++i + i++;
Результат этого кода на C# 2.0 с компилятором MS csc:
res = 7
Резульат на C++ 8.0 с родным компилятором от MS:
res = 8 !!!
В чем же дело? Дизассемблируем и посмотрим:
C++:
Код:
mov edi, 2
inc edi
inc edi
lea eax, [edi+edi] ; Любопытно. Складываются два указателя!
mov ebp, eax
C#:
Код:
mov esi,2
inc esi
mov edi,esi
inc esi
add edi,esi
mov ebx,edi
И кто здесь прав?
Социальные закладки