## rep - repeat string operations

    repeat a string operation rcx times OR
    repeat a string operation while a condition is true a mximum of rcx times

The various repeat instructions all involve using the rcx to control the count of the number of times to execute the following string instruction. The simplest variety, rep, repeats the string instruction exactly rcs times. The next variety, repe (or repz), is limited to rcx times but also continues with the loop only if certain values are equal. The values tested depend on the specific string instruction used. The last variety, repne (or repnz), is limited to rcx times but also continues with the loop only if certain values are not equal.

            lea     rdi, [dest]         ; get the address of the destination array
            lea     rsi, [source]       ; get the address of the source array
            cld                         ; clear the direction flag to increment
            mov     ecx, 1000           ; count = 1000
            rep     movsq               ; move 1000 quadwords from source to dest
                                        ; rdi and rsi increment by 8 each time

            lea     rdi, [source]       ; get the address of the array
            cld                         ; clear the direction flag to increment
            mov     ecx, -1             ; count is pretty big
            xor     al, al              ; will scan for 0 byte
            repne   scasb               ; scan forward at most a lot
                                        ; rdi increments by 1 each time
                                        ; repeats while the byte scanned is != al
            mov     eax, -2             ; we start at -1 end up 1 past the end
            sub     eax, ecx            ; yields the length of a C string
            ; Consider a string of length 0.
            ; The first iteration of the repeat finds the 0 byte.
            ; This means ecx == -2 and subtracting -2 - -2 = 0

            ; Consider a string of length 1.
            ; The second iteration of the repeat finds the 0 byte.
            ; This means ecx == -3 and -2 - -3 = 1.

### flags: none