Operation
IF AddressSize = 16
THEN use SI for source-index;
ELSE (* AddressSize = 32 *)
use ESI for source-index;
FI;
IF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))
THEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)
IF NOT I-O-Permission (DEST, width(DEST))
THEN #GP(0);
FI;
FI;
IF byte type of instruction
THEN
[DX] [source-index]; (* Write byte at DX I/O address *)
IF DF = 0 THEN IncDec 1 ELSE IncDec -1; FI;
FI;
IF OperandSize = 16
THEN
[DX] [source-index]; (* Write word at DX I/O address *)
IF DF = 0 THEN IncDec 2 ELSE IncDec -2; FI;
FI;
IF OperandSize = 32
THEN
[DX] [source-index]; (* Write dword at DX I/O address *)
IF DF = THEN IncDec 4 ELSE IncDec -4; FI;
FI;
FI;
source-index source-index + IncDec;
[Back: Description]
[Next: Protected Mode Exceptions]