It seems that these two instructions change the ecx
register:
call dwtoa
Invoke StdOut, addr asd
My guess would be at dwtoa
it might return the length of the asci array returned in the ecx
register.
Try this:
loop_start:
mov eax, [array + edi * 4]
push ecx // saving ecx before call
push offset asd
push eax
call dwtoa
Invoke StdOut, addr asd
pop ecx // restore the ecx from before the calls.
inc edi //incrementing edi
dec ecx // decrementing ecx
cmp ecx,0 // comparing ecx against 0
jne loop_start // if not equal loop again