CLD pone el flag a 0, tambien existen STD que si pone el flag a 1 y entonces se decrementan las direcciones. Un uso muy util es por ejemplo cuando queres copiar memoria, va aumentando o decrementando ambas direcciones (fuente y destino) y usando un repXXX podes lograr la copia completa.
Un ejemplo tonto en MASM, depuralo y vas a ver como funciona (las copias tendran el valor de los originales):
.386
.model flat, stdcall
.data
w dd 14
x dd 15
y dd 16
z dd 17
w1 dd 0
x1 dd 0
y1 dd 0
z1 dd 0
.code
main:
mov esi, offset w
mov edi, offset w1
mov ecx, 4
rep movsd
ret
end main
Lo mismo pero decrementando:
std
mov esi, offset z
mov edi, offset z1
mov ecx, 4
rep movsd
cld ;siempre hay que restaurar este flag, por defecto es 0