A.5.178 MOVSB, MOVSW, MOVSD: Move String
MOVSB ; A4 [8086]
MOVSW ; o16 A5 [8086]
MOVSD ; o32 A5 [386]
MOVSB copies the byte at [DS:SI] or [DS:ESI] to [ES:DI] or [ES:EDI].
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 MOVSB).
The use of ES for the store to [DI] or [EDI] cannot be overridden.
MOVSW and MOVSD work in the same way, but they copy a word or a
doubleword instead of a byte, and increment or decrement the addressing
registers by 2 or 4 instead of 1.
The REP prefix may be used to repeat the instruction CX (or ECX - again,
the address size chooses which) times. The REP alias REPE, as well as
the differently-encoded REPNE, are both allowed as well. They behave in
the same way as REP.