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


Description

Copies 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 overridden 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 1 for byte operations, by 2 for word operations, or by 4 for doubleword operations.


The OUTS, OUTSB, OUTSW, and OUTSD instructions can be preceded by the REP prefix for block input of ECX bytes, words, or doublewords. See "REP/REPE/REPZ/REPNE /REPNZ—Repeat String Operation Prefix" in this chapter for a description of the REP prefix.


This instruction is only useful for accessing I/O ports located in the processor's I/O address space. See Chapter 9, Input/Output, in the Intel Architecture Software Developer's Manual, Vo l u me 1 , for more information on accessing I/O ports in the I/O address space.


Variations        Bytes                Clocks

outsb                1                   13   NP

outsw                1                     13   NP

outsd                1                     13   NP


Protected Mode

                                         10/27/25 NP


cycles for: CPL <= IOPL / CPL > IOPL / V86


Flags

None.

Created with the Personal Edition of HelpNDoc: Produce online help for Qt applications