Manos,
Here is a quick optimisation for your original algo, 1 less instruction per iteration and unrolled by 2.
IF 0 ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Build this template with "CONSOLE ASSEMBLE AND LINK"
ENDIF ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
include \masm32\include\masm32rt.inc
StrCpy2 PROTO src:DWORD,dst:DWORD
strCopy PROTO pDest:DWORD, pSource:DWORD
.data
align 4
item db "The game is done, I've won I've won quote she and whistled thrice",0
align 4
buff db " "
.code
start:
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
call main
inkey
exit
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
main proc
push esi
REPEAT 8
invoke GetTickCount
push eax
mov esi, 10000000
@@:
invoke strCopy, ADDR buff,ADDR item
sub esi, 1
jnz @B
invoke GetTickCount
pop ecx
sub eax, ecx
print ustr$(eax)," Original",13,10
invoke GetTickCount
push eax
mov esi, 10000000
@@:
invoke StrCpy2, ADDR item,ADDR buff
sub esi, 1
jnz @B
invoke GetTickCount
pop ecx
sub eax, ecx
print ustr$(eax)," Modified",13,10
ENDM
pop esi
ret
main endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
align 4
strCopy proc pDest:DWORD, pSource:DWORD
mov ecx, pSource
mov edx, pDest
copyLoop:
mov al, byte ptr [ecx]
inc ecx
mov byte ptr [edx],al
inc edx
cmp al, 0
jnz copyLoop
mov al, byte ptr 0
ret
strCopy endp
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
align 4
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
StrCpy2 proc src:DWORD,dst:DWORD
mov ecx, [esp+4] ; src
mov edx, [esp+8] ; dst
push esi
mov esi, -1
@@:
add esi, 1
movzx eax, BYTE PTR [ecx+esi]
mov BYTE PTR [edx+esi], al
test eax, eax
jz @F
add esi, 1
movzx eax, BYTE PTR [ecx+esi]
mov BYTE PTR [edx+esi], al
test eax, eax
jnz @B
@@:
pop esi
ret 8
StrCpy2 endp
OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end start
Timing on my Core2 Quad.
531 Original
344 Modified
531 Original
344 Modified
516 Original
359 Modified
516 Original
343 Modified
532 Original
343 Modified
532 Original
343 Modified
516 Original
359 Modified
516 Original
344 Modified
Press any key to continue ...