#include #include #pragma comment(lib, "winmm.lib") #define MUL(c, a, b) { \ DWORD tempA = a; \ DWORD tempB = b; \ __asm { \ __asm mov eax, tempA \ __asm mov edx, tempB \ __asm mul edx \ __asm shr eax, 16 \ __asm shl edx, 16 \ __asm or eax, edx \ __asm mov c, eax \ } } #define ESTIMATE 10000000 void main(void) { DWORD tm[3]; DWORD a, b, c; int i; a = 100; b = 200; tm[0] = timeGetTime( ); for(i = 0; i < ESTIMATE; i ++) MUL(c, a, b); tm[1] = timeGetTime( ); for(i = 0; i < ESTIMATE; i ++) c = MulDiv(a, b, (1<<16)); tm[2] = timeGetTime( ); printf("%d , %d\n", tm[1] - tm[0], tm[2] -tm[1]); }