выполняется на 7ке 64x такой кусок кода (выдрал из консольного приложения), компилировал и в 32х и в 64х. Code (Text): ;---------------------------- counter0 xor eax, eax mov [main_time0], eax mov [main_time1], eax mov eax, 0x80000001 cpuid rdtsc mov [main_time0], edx mov [main_time1], eax ;---------------------------- counter0 mov eax, [x] ; xor edx, edx ; mul! add eax, [y] ; eax = x + y mov ebx, eax sub eax, 1 ; (x + y - 1) sub ebx, 2 ; (x + y - 2) mul ebx shr eax, 1 ; /2 add eax, [y] ; mov [z], eax ;---------------------------- counter1 clc rdtsc ; снова читаем счетчик sub eax, [main_time1] ; вычисляем разность sub edx, [main_time0] mov [main_time1], eax mov [main_time0], edx sub eax, 105 ; Pentium 4 D ;---------------------------- counter1 main_time0 dd 0 main_time1 dd 0 x dd 0 y dd 0 z dd 0 после выполнения eax = 0 (иногда 0xE). а если закомментировть саму процедуру подсчета z, результат в eax абсолютно аналогичный (0 или 0xE). так быстро считает?
t00x Code (Text): sub eax, [main_time1] ; вычисляем разность sub edx, [main_time0] 64-х битные числа так не вычитаются. Сначала вычитаются нижние части (EAX), а потом верхние с заемом: Code (Text): sub eax, [main_time1] ; вычисляем разность sbb edx, [main_time0] P.S. В main_time0 логичнее писать EAX, т.к. это нижняя часть счетчика