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]