<<<    Index    >>>
3-303
INSTRUCTION SET REFERENCE
INS/INSB/INSW/INSD—Input from Port to String
Description
These instructions copy the data from the I/O port specified with the source operand (second
operand) to the destination operand (first operand). The source operand is an I/O port address
(from 0 to 65,535) that is read from the DX register. The destination operand is a memory loca-
tion, the address of which is read from either the ES:EDI or the ES:DI registers (depending on
the address-size attribute of the instruction, 32 or 16, respectively). The ES segment cannot be
overridden with a segment override prefix. 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 INS
mnemonic) allows the source and destination operands to be specified explicitly. Here, the
source operand must be “DX,” and the destination operand should be a symbol that indicates the
size of the I/O port and the destination address. This explicit-operands form is provided to allow
documentation; however, note that the documentation provided by this form can be misleading.
That is, the destination 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
specified by the ES:(E)DI registers, which must be loaded correctly before the INS instruction
is executed.
The no-operands form provides “short forms” of the byte, word, and doubleword versions of the
INS instructions. Here also DX is assumed by the processor to be the source operand and
ES:(E)DI is assumed to be the destination operand. The size of the I/O port is specified with the
choice of mnemonic: INSB (byte), INSW (word), or INSD (doubleword).
After the byte, word, or doubleword is transfer from the I/O port to the memory location, the
(E)DI 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)DI register is incremented; if the DF
flag is 1, the (E)DI register is decremented.) The (E)DI register is incremented or decremented
by one for byte operations, by two for word operations, or by four for doubleword operations.
Opcode
Instruction
Description
6C
INS m8, DX 
Input byte from I/O port specified in DX into memory 
location specified in ES:(E)DI
6D
INS m16, DX
Input word from I/O port specified in DX into memory 
location specified in ES:(E)DI
6D
INS m32, DX
Input doubleword from I/O port specified in DX into 
memory location specified in ES:(E)DI
6C
INSB
Input byte from I/O port specified in DX into memory 
location specified with ES:(E)DI
6D
INSW
Input word from I/O port specified in DX into memory 
location specified in ES:(E)DI
6D
INSD
Input doubleword from I/O port specified in DX into 
memory location specified in ES:(E)DI
<<<    Index    >>>