cmps - compare strings instructions

compare successive locations in 2 arrays
with repe compare until a mismatch
with repne compare until they match

There are 4 varieties of cmps instructions: cmpsb, cmpsw, cmpsd and cmpsq which are for byte, word, doubleword and quadword arrays. They all operate using rcx to define the maximum number of iterations to use with repe or repne. The source array address is stored in rsi and the destination in rdi. The direction flag determines whether the addresses are incremented (DF=0) or decremented (DF=1). You use repe to repeat comparisons as long as they are equal; i.e. repeat until there is a mismatch. Of less common utility is to use repne which compares as long as the corresponding array elements are not equal; i.e. repeat until there is a match.

        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
        repe    cmpsb               ; compare up to 1000 bytes
                                    ; rdi and rsi increment by 1 each time
        ; At the end 1000 - ecx - 1 is the count of matching bytes.
        ; Likewise [rdi-1] and [rsi-1] are the locations of the mismatched
        ; bytes.
        ; If ecx == 0 at the end, the arrays matched for 1000 bytes.

        lea     rsi, [source]       ; get the address of the source array
        cld                         ; clear the direction flag to increment
        mov     ecx, 100            ; count = 100
        repne   cmpsd               ; compare 100 array elements
                                    ; stop on first match.
                                    ; rsi increments by 4 each time
                                    ; I can't guess why you would do this.

flags: none