REp, REPE, REPNE, REPZ, and REPNZ are intended to work with string instructions, the contents of the (e)cx register, and the direction state (CLD or SED for going up or down in memory). So is is not a choice for more complex operations.
Usually you would start with something like
J(e)cxz skipover
domore:
do your thing here
dec (e)cx
jnz domore
skipover:
Note my emphasis on (e)cx. You have to decide if the 32-bits of the ecx register are needed,
or if you just want the 16 bits of cx. Since you are doing only a count of 10, you could get
by with just using the upper or lower byte of any register, but the first jump would not be
applicable. Instead, suppose you decided to use cl. you could do "or cl,cl" or "and cl,cl" to
set a flag state related to cl's contents. On the other hand, since you know you are starting
with 20, you can bypass the first jump altogether. I won't swear that you can do an "or" or
an "and" involving cl because I haven't tried it. Lots of operations are pretty specific to the
al, ah, ax, or eax registers, and far less applicable to the other registers. Trial and Error tells
the tale.