3-465
INSTRUCTION SET REFERENCE
OUTS/OUTSB/OUTSW/OUTSDOutput String to Port
Description
These instructions copy data from the source operand (second operand) to the I/O port specified
with the destination operand (first operand). The source operand is a memory location, the
address of which is read from either the DS:EDI or the DS:DI registers (depending on the
address-size attribute of the instruction, 32 or 16, respectively). The DS segment may be over-
ridden with a segment override prefix. The destination operand is an I/O port address (from 0 to
65,535) that is read from the DX register. The size of the I/O port being accessed (that is, the
size of the source and destination operands) is determined by the opcode for an 8-bit I/O port or
by the operand-size attribute of the instruction for a 16- or 32-bit I/O port.
At the assembly-code level, two forms of this instruction are allowed: the explicit-operands
form and the no-operands form. The explicit-operands form (specified with the OUTS
mnemonic) allows the source and destination operands to be specified explicitly. Here, the
source operand should be a symbol that indicates the size of the I/O port and the source address,
and the destination operand must be DX. This explicit-operands form is provided to allow docu-
mentation; however, note that the documentation provided by this form can be misleading. That
is, the source operand symbol must specify the correct type (size) of the operand (byte, word,
or doubleword), but it does not have to specify the correct location. The location is always spec-
ified by the DS:(E)SI registers, which must be loaded correctly before the OUTS instruction is
executed.
The no-operands form provides short forms of the byte, word, and doubleword versions of the
OUTS instructions. Here also DS:(E)SI is assumed to be the source operand and DX is assumed
to be the destination operand. The size of the I/O port is specified with the choice of mnemonic:
OUTSB (byte), OUTSW (word), or OUTSD (doubleword).
After the byte, word, or doubleword is transferred from the memory location to the I/O port, the
(E)SI register is incremented or decremented automatically according to the setting of the DF
flag in the EFLAGS register. (If the DF flag is 0, the (E)SI register is incremented; if the DF flag
is 1, the (E)SI register is decremented.) The (E)SI register is incremented or decremented by ne
for byte operations, by two for word operations, or by four for doubleword operations.
Opcode
Instruction
Description
6E
OUTS DX, m8
Output byte from memory location specified in DS:(E)SI to
I/O port specified in DX
6F
OUTS DX, m16
Output word from memory location specified in DS:(E)SI
to I/O port specified in DX
6F
OUTS DX, m32
Output doubleword from memory location specified in
DS:(E)SI to I/O port specified in DX
6E
OUTSB
Output byte from memory location specified in DS:(E)SI to
I/O port specified in DX
6F
OUTSW
Output word from memory location specified in DS:(E)SI
to I/O port specified in DX
6F
OUTSD
Output doubleword from memory location specified in
DS:(E)SI to I/O port specified in DX