A.5.27 CMPSB, CMPSW, CMPSD: Compare Strings
CMPSB ; A6 [8086]
CMPSW ; o16 A7 [8086]
CMPSD ; o32 A7 [386]
CMPSB compares the byte at [DS:SI] or [DS:ESI] with the byte at [ES:DI]
or [ES:EDI], and sets the flags accordingly. It then increments or
decrements (depending on the direction flag: increments if the flag is
clear, decrements if it is set) SI and DI (or ESI and EDI).
The registers used are SI and DI if the address size is 16 bits, and ESI
and EDI if it is 32 bits. If you need to use an address size not equal
to the current BITS setting, you can use an explicit "a16" or "a32"
prefix.
The segment register used to load from [SI] or [ESI] can be overridden
by using a segment register name as a prefix (for example, ES CMPSB).
The use of ES for the load from [DI] or [EDI] cannot be overridden.
CMPSW and CMPSD work in the same way, but they compare a word or a
doubleword instead of a byte, and increment or decrement the addressing
registers by 2 or 4 instead of 1.
The REPE and REPNE prefixes (equivalently, REPZ and REPNZ) may be used
to repeat the instruction up to CX (or ECX - again, the address size
chooses which) times until the first unequal or equal element is found.
To NASM, REP is an alias for REPE.