And a version minimizing the divisions. I haven't figured out how ro use the VS debugger to do timing and memory analysis.
void main() {
int i,_3,_5,flag;
for (i = 0; i < 4; i++) {
_3 = i % 3;
_5 = i % 5;
if (!_3 && !_5)flag = 2;
else if(!_3)flag = 1;
else if(!_5)flag = 0;
}
}
int i,_3,_5,flag;
for (i = 0; i < 4; i++) {
00B74468 mov dword ptr ,0
00B7446F jmp main+3Ah (0B7447Ah)
00B74471 mov eax,dword ptr
00B74474 add eax,1
00B74477 mov dword ptr ,eax
00B7447A cmp dword ptr ,4
00B7447E jge main+8Fh (0B744CFh)
_3 = i % 3;
00B74480 mov eax,dword ptr
00B74483 cdq
00B74484 mov ecx,3
00B74489 idiv eax,ecx
00B7448B mov dword ptr [_3],edx
_5 = i % 5;
00B7448E mov eax,dword ptr
00B74491 cdq
00B74492 mov ecx,5
00B74497 idiv eax,ecx
00B74499 mov dword ptr [_5],edx
if (!_3 && !_5)flag = 2;
00B7449C cmp dword ptr [_3],0
00B744A0 jne main+71h (0B744B1h)
00B744A2 cmp dword ptr [_5],0
00B744A6 jne main+71h (0B744B1h)
00B744A8 mov dword ptr [flag],2
00B744AF jmp main+8Dh (0B744CDh)
else if(!_3)flag = 1;
00B744B1 cmp dword ptr [_3],0
00B744B5 jne main+80h (0B744C0h)
00B744B7 mov dword ptr [flag],1
00B744BE jmp main+8Dh (0B744CDh)
else if(!_5)flag = 0;
00B744C0 cmp dword ptr [_5],0
00B744C4 jne main+8Dh (0B744CDh)
00B744C6 mov dword ptr [flag],0
}
00B744CD jmp main+31h (0B74471h)
}