Operation

IF AddressSize = 16
THEN use DI for dest-index;
ELSE (* AddressSize = 32 *)
use EDI for dest-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 (SRC, width(SRC))
THEN #GP(0);
FI;
FI;
IF byte type of instruction
THEN
ES:[dest-index]  [DX]; (* Reads byte at DX from I/O address space *)
IF DF = 0 THEN IncDec  1 ELSE IncDec  -1; FI;
FI;
IF OperandSize = 16
THEN
ES:[dest-index]  [DX]; (* Reads byte at DX from I/O address space *)
IF DF = 0 THEN IncDec  2 ELSE IncDec  -2; FI;
FI;
IF OperandSize = 32
THEN
ES:[dest-index]  [DX]; (* Reads dword at DX from I/O address space *)
IF DF = 0 THEN IncDec  4 ELSE IncDec  -4; FI; FI;
dest-index  dest-index + IncDec;


[Back: Description]
[Next: Protected Mode Exceptions]