## stos - store string instructions

    *rdi = rax, eax, ax or al
    increment or decrement rdi by 8, 4, 2 or 1

There are 4 varieties of stos: stosb, stosw, stosd and stosq which store byte, word, doubleword and quadword values into the array pointed at by rdi. After each store rdi is incremented (if DF=0) or decremented (if DF=1). Using lods with rep will fill an array with a single value. lods can also be used within a loop to selectively load values and inspect them.

These examples fill arrays with a single value.

            lea     rdi, [dest]         ; get the address of the destination array
            cld                         ; clear the direction flag to increment
            mov     ecx, 1000000        ; the number of times to repeat
            xor     al, al              ; prepare to fill with 0's
            rep     stosb               ; place 1000000 0 bytes into the array

            lea     rdi, [dest]         ; get the address of the destination array
            cld                         ; clear the direction flag to increment
            mov     ecx, 1000000        ; the number of times to repeat
            mov     rax, 0xbaadf00ddeadbeef
            rep     stosq               ; place 1000000 quadwords into the array

In this example lodsb and stosb will be used to copy data until a 0 byte is reached and carriage-return bytes (0x0d) will not be copied.

            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, -1             ; count is pretty big
    top:    lodsb                       ; get the next byte and increment rsi by 1
            cmp     al, 0x13
            je      top                 ; if the byte is \r skip it
            stos                        ; if it is not \r copy it
                                        ; this will increment rdi
            cmp     al, 0
            je      done                ; 0 byte means end of string
            loop    top                 ; rinse and repeat
    done:

### flags: none