Vol. 3 17-15
8086 EMULATION
execution sequence after verifying that it was entered as a result of a HLT
execution.
See Section 17.3, “Interrupt and Exception Handling in Virtual-8086 Mode”, for infor-
mation on leaving virtual-8086 mode to handle an interrupt or exception generated
in virtual-8086 mode.

17.2.7 Sensitive Instructions

When an IA-32 processor is running in virtual-8086 mode, the CLI, STI, PUSHF, POPF ,
INT n, and IRET instructions are sensitive to IOPL. The IN, INS, OUT, and OUTS
instructions, which are sensitive to IOPL in protected mode, are not sensitive in
virtual-8086 mode.
The CPL is always 3 while running in virtual-8086 mode; if the IOPL is less than 3, an
attempt to use the IOPL-sensitive instructions listed above triggers a general-protec-
tion exception (#GP). These instructions are sensitive to IOPL to give the virtual-
8086 monitor a chance to emulate the facilities they affect.

17.2.8 Virtual-8086 Mode I/O

Many 8086 programs written for non-multitasking systems directly access I/O ports.
This practice may cause problems in a multitasking environment. If more than one
program accesses the same port, they may interfere with each other. Most multi-
tasking systems require application programs to access I/O ports through the oper-
ating system. This results in simplified, centralized control.
The processor provides I/O protection for creating I/O that is compatible with the
environment and transparent to 8086 programs. Designers may take any of several
possible approaches to protecting I/O ports:
Protect the I/O address space and generate exceptions for all attempts to
perform I/O directly.
Let the 8086 program perform I/O directly.
Generate exceptions on attempts to access specific I/O ports.
Generate exceptions on attempts to access specific memory-mapped I/O ports.
The method of controlling access to I/O ports depends upon whether they are
I/O-port mapped or memory mapped.

17.2.8.1 I/O-Port-Mapped I/O

The I/O permission bit map in the TSS can be used to generate exceptions on
attempts to access specific I/O port addresses. The I/O permission bit map of each
virtual-8086-mode task determines which I/O addresses generate exceptions for
that task. Because each task may have a different I/O permission bit map, the
addresses that generate exceptions for one task may be different from the addresses