Whoops, looks like I've indeed mixed up my assembler.
While the rep/repe/repnz can be used in conjunction with movs(b/w) it will not terminate on the z flag in the eflags register (so it won't stop if *esi == 0) but rather when ecx = 0.
So ecx needs to contain the size of the string you want to move, and rep movsb does not use the zero flag.
repnz movsb is undocumented and undefined, MOVS doesnt modify flags, not sure how would that work