VS2k3 --- e:\vcprogs\valami\valami.cpp ----------------------------------------------- // Valami.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include //using namespace std; #define SIZE 100000 #define REPEAT 1000 #define TOTAL_REP 10 #define TYPE short #define TEST(x,y) s = clock(); for(int j = 0; j < REPEAT; j++) for(int i = 0; i < SIZE; i++) x[i] = x[0]+x[SIZE-1]+x[i/2]; e[y] += clock() - s; TYPE *a; TYPE b[SIZE+1]; void main (void) { 00401000 push ebp 00401001 mov ebp,esp 00401003 and esp,0FFFFFFF8h 00401006 mov eax,30D6Ch 0040100B call _chkstk (401500h) 00401010 mov eax,dword ptr [___security_cookie (40B084h)] 00401015 push ebx 00401016 push esi 00401017 push edi TYPE *c = new TYPE[SIZE+1]; 00401018 push 30D42h 0040101D mov dword ptr [esp+30D78h],eax 00401024 call operator new[] (4012EDh) 00401029 mov esi,eax TYPE d[SIZE+1] = {}; 0040102B xor eax,eax 0040102D mov ecx,0C350h 00401032 lea edi,[esp+2Ch] 00401036 rep stos dword ptr [edi] a = new TYPE[SIZE+1]; 00401038 push 30D42h 0040103D stos word ptr [edi] 0040103F call operator new[] (4012EDh) 00401044 add esp,8 00401047 mov dword ptr [a (43C784h)],eax clock_t s,e[4] = {0,0,0,0}; 0040104C xor eax,eax 0040104E mov dword ptr [esp+10h],eax 00401052 mov dword ptr [esp+14h],eax 00401056 mov dword ptr [esp+18h],eax 0040105A mov dword ptr [esp+1Ch],eax 0040105E mov dword ptr [esp+20h],0Ah for(int k = 0; k < TOTAL_REP; k++) { TEST(a,0); 00401066 call clock (4013E7h) 0040106B mov dword ptr [esp+24h],eax 0040106F mov dword ptr [esp+0Ch],3E8h 00401077 jmp main+80h (401080h) 00401079 lea esp,[esp] 00401080 mov ecx,2 00401085 mov eax,6 0040108A mov edi,4E20h 0040108F nop 00401090 mov edx,dword ptr [a (43C784h)] 00401096 lea ebx,[ecx-2] 00401099 shr ebx,1 0040109B mov bx,word ptr [edx+ebx*2] 0040109F add bx,word ptr [edx+30D3Eh] 004010A6 add eax,0Ah 004010A9 add bx,word ptr [edx] 004010AC mov word ptr [eax+edx-10h],bx 004010B1 mov edx,dword ptr [a (43C784h)] 004010B7 lea ebx,[ecx-1] 004010BA shr ebx,1 004010BC mov bx,word ptr [edx+ebx*2] 004010C0 add bx,word ptr [edx+30D3Eh] 004010C7 add bx,word ptr [edx] 004010CA mov word ptr [eax+edx-0Eh],bx 004010CF mov edx,dword ptr [a (43C784h)] 004010D5 mov ebx,ecx 004010D7 shr ebx,1 004010D9 mov bx,word ptr [edx+ebx*2] 004010DD add bx,word ptr [edx+30D3Eh] 004010E4 add bx,word ptr [edx] 004010E7 mov word ptr [eax+edx-0Ch],bx 004010EC mov edx,dword ptr [a (43C784h)] 004010F2 lea ebx,[ecx+1] 004010F5 shr ebx,1 004010F7 mov bx,word ptr [edx+ebx*2] 004010FB add bx,word ptr [edx+30D3Eh] 00401102 add bx,word ptr [edx] 00401105 mov word ptr [eax+edx-0Ah],bx 0040110A mov edx,dword ptr [a (43C784h)] 00401110 lea ebx,[ecx+2] 00401113 shr ebx,1 00401115 mov bx,word ptr [edx+ebx*2] 00401119 add bx,word ptr [edx+30D3Eh] 00401120 add ecx,5 00401123 add bx,word ptr [edx] 00401126 dec edi 00401127 mov word ptr [eax+edx-8],bx 0040112C jne main+90h (401090h) 00401132 dec dword ptr [esp+0Ch] 00401136 jne main+80h (401080h) 0040113C call clock (4013E7h) 00401141 mov edx,dword ptr [esp+24h] 00401145 mov ecx,dword ptr [esp+10h] 00401149 sub eax,edx 0040114B add ecx,eax 0040114D mov dword ptr [esp+10h],ecx TEST(b,1); 00401151 call clock (4013E7h) 00401156 mov edi,eax 00401158 mov ecx,3E8h 0040115D lea ecx,[ecx] 00401160 xor eax,eax 00401162 mov ebx,dword ptr [b (40BA40h)] 00401168 mov edx,eax 0040116A shr edx,1 0040116C movsx edx,word ptr [edx*2+40BA40h] 00401174 add dx,word ptr ds:[43C77Eh] 0040117B add edx,ebx 0040117D mov word ptr [eax*2+40BA40h],dx 00401185 inc eax 00401186 cmp eax,186A0h 0040118B jl main+162h (401162h) 0040118D dec ecx 0040118E jne main+160h (401160h) 00401190 call clock (4013E7h) 00401195 mov ecx,dword ptr [esp+14h] 00401199 sub eax,edi 0040119B add ecx,eax 0040119D mov dword ptr [esp+14h],ecx TEST(c,2); 004011A1 call clock (4013E7h) 004011A6 mov edi,eax 004011A8 mov dword ptr [esp+0Ch],3E8h 004011B0 mov ecx,2 004011B5 lea eax,[esi+4] 004011B8 mov edx,4E20h 004011BD lea ecx,[ecx] 004011C0 lea ebx,[ecx-2] 004011C3 shr ebx,1 004011C5 mov bx,word ptr [esi+ebx*2] 004011C9 add bx,word ptr [esi] 004011CC add eax,0Ah 004011CF add bx,word ptr [esi+30D3Eh] 004011D6 mov word ptr [eax-0Eh],bx 004011DA lea ebx,[ecx-1] 004011DD shr ebx,1 004011DF mov bx,word ptr [esi+ebx*2] 004011E3 add bx,word ptr [esi] 004011E6 add bx,word ptr [esi+30D3Eh] 004011ED mov word ptr [eax-0Ch],bx 004011F1 mov ebx,ecx 004011F3 shr ebx,1 004011F5 mov bx,word ptr [esi+ebx*2] 004011F9 add bx,word ptr [esi] 004011FC add bx,word ptr [esi+30D3Eh] 00401203 mov word ptr [eax-0Ah],bx 00401207 lea ebx,[ecx+1] 0040120A shr ebx,1 0040120C mov bx,word ptr [esi+ebx*2] 00401210 add bx,word ptr [esi] 00401213 add bx,word ptr [esi+30D3Eh] 0040121A mov word ptr [eax-8],bx 0040121E lea ebx,[ecx+2] 00401221 shr ebx,1 00401223 mov bx,word ptr [esi+ebx*2] 00401227 add bx,word ptr [esi] 0040122A add ecx,5 0040122D add bx,word ptr [esi+30D3Eh] 00401234 dec edx 00401235 mov word ptr [eax-6],bx 00401239 jne main+1C0h (4011C0h) 0040123B dec dword ptr [esp+0Ch] 0040123F jne main+1B0h (4011B0h) 00401245 call clock (4013E7h) 0040124A mov ecx,dword ptr [esp+18h] 0040124E sub eax,edi 00401250 add ecx,eax 00401252 mov dword ptr [esp+18h],ecx TEST(d,3); 00401256 call clock (4013E7h) 0040125B mov edi,eax 0040125D mov ecx,3E8h 00401262 xor eax,eax 00401264 mov ebx,dword ptr [esp+28h] 00401268 mov edx,eax 0040126A shr edx,1 0040126C movsx edx,word ptr [esp+edx*2+28h] 00401271 add dx,word ptr [esp+30D66h] 00401279 add edx,ebx 0040127B mov word ptr [esp+eax*2+28h],dx 00401280 inc eax 00401281 cmp eax,186A0h 00401286 jl main+264h (401264h) 00401288 dec ecx 00401289 jne main+262h (401262h) 0040128B call clock (4013E7h) 00401290 mov ecx,dword ptr [esp+1Ch] 00401294 sub eax,edi 00401296 add ecx,eax 00401298 mov eax,dword ptr [esp+20h] 0040129C dec eax 0040129D mov dword ptr [esp+1Ch],ecx 004012A1 mov dword ptr [esp+20h],eax 004012A5 jne main+66h (401066h) } for(int i = 0; i < 4; i++) 004012AB xor esi,esi 004012AD lea ecx,[ecx] printf("Time: %f\n", (float)(e[i]) / float(TOTAL_REP) / (float)CLK_TCK); 004012B0 fild dword ptr [esp+esi*4+10h] 004012B4 sub esp,8 004012B7 fmul dword ptr [__real@38d1b717 (409118h)] 004012BD fstp qword ptr [esp] 004012C0 push offset string "Time: %f\n" (40910Ch) 004012C5 call printf (4013B6h) 004012CA add esp,0Ch 004012CD inc esi 004012CE cmp esi,4 004012D1 jl main+2B0h (4012B0h) getch(); 004012D3 call _getch (408031h) } 004012D8 mov ecx,dword ptr [esp+30D74h] 004012DF xor eax,eax 004012E1 call __security_check_cookie (4014E9h) 004012E6 pop edi 004012E7 pop esi 004012E8 pop ebx 004012E9 mov esp,ebp 004012EB pop ebp 004012EC ret ---------------------------------------------------------- VS2k8 --- e:\vcprogs\valami2\valami2\valami2.cpp ------------------------------------- 00401002 in al,dx 00401003 and esp,0FFFFFFC0h 00401006 mov eax,30D74h 0040100B call _chkstk (401AC0h) 00401010 mov eax,dword ptr [___security_cookie (403000h)] 00401015 xor eax,esp 00401017 mov dword ptr [esp+30D70h],eax 0040101E push ebx 0040101F push esi 00401020 push edi TYPE *c = new TYPE[SIZE+1]; 00401021 push 30D42h 00401026 call operator new[] (4012C8h) TYPE d[SIZE+1] = {}; 0040102B push 30D42h 00401030 mov esi,eax 00401032 xor edi,edi 00401034 lea eax,[esp+38h] 00401038 push edi 00401039 push eax 0040103A call memset (401AECh) a = new TYPE[SIZE+1]; 0040103F push 30D42h 00401044 call operator new[] (4012C8h) 00401049 mov ebx,dword ptr [__imp__clock (40209Ch)] 0040104F add esp,14h 00401052 mov dword ptr [a (4340BCh)],eax clock_t s,e[4] = {0,0,0,0}; 00401057 mov dword ptr [esp+1Ch],edi 0040105B mov dword ptr [esp+20h],edi 0040105F mov dword ptr [esp+24h],edi 00401063 mov dword ptr [esp+28h],edi 00401067 mov dword ptr [esp+2Ch],64h 0040106F nop for(int k = 0; k < TOTAL_REP; k++) { TEST(a,0); 00401070 call ebx 00401072 mov dword ptr [esp+18h],eax 00401076 mov eax,dword ptr [a (4340BCh)] 0040107B mov dword ptr [esp+14h],3E8h 00401083 mov edx,2 00401088 lea ecx,[eax+4] 0040108B mov edi,4E20h 00401090 lea ebx,[edx-2] 00401093 shr ebx,1 00401095 movzx ebx,word ptr [eax+ebx*2] 00401099 add bx,word ptr [eax+30D3Eh] 004010A0 add ecx,0Ah 004010A3 add bx,word ptr [eax] 004010A6 mov word ptr [ecx-0Eh],bx 004010AA lea ebx,[edx-1] 004010AD shr ebx,1 004010AF movzx ebx,word ptr [eax+ebx*2] 004010B3 add bx,word ptr [eax+30D3Eh] 004010BA add bx,word ptr [eax] 004010BD mov word ptr [ecx-0Ch],bx 004010C1 mov ebx,edx 004010C3 shr ebx,1 004010C5 movzx ebx,word ptr [eax+ebx*2] 004010C9 add bx,word ptr [eax+30D3Eh] 004010D0 add bx,word ptr [eax] 004010D3 mov word ptr [ecx-0Ah],bx 004010D7 lea ebx,[edx+1] 004010DA shr ebx,1 004010DC movzx ebx,word ptr [eax+ebx*2] 004010E0 add bx,word ptr [eax+30D3Eh] 004010E7 add bx,word ptr [eax] 004010EA mov word ptr [ecx-8],bx 004010EE lea ebx,[edx+2] 004010F1 shr ebx,1 004010F3 movzx ebx,word ptr [eax+ebx*2] 004010F7 add bx,word ptr [eax+30D3Eh] 004010FE add edx,5 00401101 add bx,word ptr [eax] 00401104 sub edi,1 00401107 mov word ptr [ecx-6],bx 0040110B jne main+90h (401090h) 0040110D sub dword ptr [esp+14h],1 00401112 jne main+83h (401083h) 00401118 mov ebx,dword ptr [__imp__clock (40209Ch)] 0040111E call ebx 00401120 sub eax,dword ptr [esp+18h] 00401124 add dword ptr [esp+1Ch],eax TEST(b,1); 00401128 call ebx 0040112A mov edi,eax 0040112C mov ecx,3E8h 00401131 xor eax,eax 00401133 mov edx,eax 00401135 shr edx,1 00401137 mov dx,word ptr b (403378h)[edx*2] 0040113F add dx,word ptr ds:[4340B6h] 00401146 inc eax 00401147 add dx,word ptr [b (403378h)] 0040114E cmp eax,186A0h 00401153 mov word ptr __fmode+6 (403376h)[eax*2],dx 0040115B jl main+133h (401133h) 0040115D sub ecx,1 00401160 jne main+131h (401131h) 00401162 call ebx 00401164 sub eax,edi 00401166 add dword ptr [esp+20h],eax TEST(c,2); 0040116A call ebx 0040116C mov dword ptr [esp+18h],eax 00401170 mov dword ptr [esp+14h],3E8h 00401178 jmp main+180h (401180h) 0040117A lea ebx,[ebx] 00401180 mov ecx,2 00401185 lea eax,[esi+4] 00401188 mov edx,4E20h 0040118D lea ecx,[ecx] 00401190 lea edi,[ecx-2] 00401193 shr edi,1 00401195 movzx edi,word ptr [esi+edi*2] 00401199 add di,word ptr [esi] 0040119C add eax,0Ah 0040119F add di,word ptr [esi+30D3Eh] 004011A6 mov word ptr [eax-0Eh],di 004011AA lea edi,[ecx-1] 004011AD shr edi,1 004011AF movzx edi,word ptr [esi+edi*2] 004011B3 add di,word ptr [esi] 004011B6 add di,word ptr [esi+30D3Eh] 004011BD mov word ptr [eax-0Ch],di 004011C1 mov edi,ecx 004011C3 shr edi,1 004011C5 movzx edi,word ptr [esi+edi*2] 004011C9 add di,word ptr [esi] 004011CC add di,word ptr [esi+30D3Eh] 004011D3 mov word ptr [eax-0Ah],di 004011D7 lea edi,[ecx+1] 004011DA shr edi,1 004011DC movzx edi,word ptr [esi+edi*2] 004011E0 add di,word ptr [esi] 004011E3 add di,word ptr [esi+30D3Eh] 004011EA mov word ptr [eax-8],di 004011EE lea edi,[ecx+2] 004011F1 shr edi,1 004011F3 movzx edi,word ptr [esi+edi*2] 004011F7 add di,word ptr [esi] 004011FA add ecx,5 004011FD add di,word ptr [esi+30D3Eh] 00401204 sub edx,1 00401207 mov word ptr [eax-6],di 0040120B jne main+190h (401190h) 0040120D sub dword ptr [esp+14h],1 00401212 jne main+180h (401180h) 00401218 call ebx 0040121A sub eax,dword ptr [esp+18h] 0040121E add dword ptr [esp+24h],eax TEST(d,3); 00401222 call ebx 00401224 mov edi,eax 00401226 mov ecx,3E8h 0040122B jmp main+230h (401230h) 0040122D lea ecx,[ecx] 00401230 xor eax,eax 00401232 mov edx,eax 00401234 shr edx,1 00401236 mov dx,word ptr [esp+edx*2+30h] 0040123B add dx,word ptr [esp+30D6Eh] 00401243 inc eax 00401244 add dx,word ptr [esp+30h] 00401249 cmp eax,186A0h 0040124E mov word ptr [esp+eax*2+2Eh],dx 00401253 jl main+232h (401232h) 00401255 sub ecx,1 00401258 jne main+230h (401230h) 0040125A call ebx 0040125C sub eax,edi 0040125E add dword ptr [esp+28h],eax 00401262 sub dword ptr [esp+2Ch],1 00401267 jne main+70h (401070h) } for(int i = 0; i < 4; i++) 0040126D mov edi,dword ptr [__imp__printf (4020A0h)] 00401273 xor esi,esi printf("Time: %f\n", (float)(e[i]) / float(TOTAL_REP) / (float)CLK_TCK); 00401275 fild dword ptr [esp+esi*4+1Ch] 00401279 sub esp,8 0040127C fdiv qword ptr [__real@4059000000000000 (402128h)] 00401282 fdiv qword ptr [__real@408f400000000000 (402120h)] 00401288 fstp qword ptr [esp] 0040128B push offset string "Time: %f\n" (402114h) 00401290 call edi 00401292 inc esi 00401293 add esp,0Ch 00401296 cmp esi,4 00401299 jl main+275h (401275h) getch(); 0040129B call dword ptr [__imp__getch (4020ACh)] } 004012A1 mov ecx,dword ptr [esp+30D7Ch] 004012A8 pop edi 004012A9 pop esi 004012AA pop ebx 004012AB xor ecx,esp 004012AD xor eax,eax 004012AF call __security_check_cookie (4012B8h) 004012B4 mov esp,ebp 004012B6 pop ebp 004012B7 ret