17-14 Vol. 3
8086 EMULATION
17.2.6 Leaving Virtual-8086 Mode
The processor can leave the virtual-8086 mode only through an interrupt or excep-
tion. The following are situations where an interrupt or exception will lead to the
processor leaving virtual-8086 mode (see Figure 17-3):
• The processor services a hardware interrupt generated to signal the suspension
of execution of the virtual-8086 application. This hardware interrupt may be
generated by a timer or other external mechanism. Upon receiving the hardware
interrupt, the processor enters protected mode and switches to a protected-
mode (or another virtual-8086 mode) task either through a task gate in the
protected-mode IDT or through a trap or interrupt gate that points to a handler
that initiates a task switch. A task switch from a virtual-8086 task to another task
loads the EFLAGS register from the TSS of the new task. The value of the VM flag
in the new EFLAGS determines if the new task executes in virtual-8086 mode or
not.
• The processor services an exception caused by code executing the virtual-8086
task or services a hardware interrupt that “belongs to” the virtual-8086 task.
Here, the processor enters protected mode and services the exception or
hardware interrupt through the protected-mode IDT (normally through an
interrupt or trap gate) and the protected-mode exception- and interrupt-
handlers. The processor may handle the exception or interrupt within the context
of the virtual 8086 task and return to virtual-8086 mode on a return from the
handler procedure. The processor may also execute a task switch and handle the
exception or interrupt in the context of another task.
• The processor services a software interrupt generated by code executing in the
virtual-8086 task (such as a software interrupt to call a MS-DOS* operating
system routine). The processor provides several methods of handling these
software interrupts, which are discussed in detail in
Section 17.3.3, “Class
3—Software Interrupt Handling in Virtual-8086 Mode”. Most of them involve the
processor entering protected mode, often by means of a general-protection
(#GP) exception. In protected mode, the processor can send the interrupt to the
virtual-8086 monitor for handling and/or redirect the interrupt back to the
application program running in virtual-8086 mode task for handling.
IA-32 processors that incorporate the virtual mode extension (enabled with the
VME flag in control register CR4) are capable of redirecting software-generated
interrupts back to the program’s interrupt handlers without leaving virtual-8086
mode. See Section 17.3.3.4, “Method 5: Software Interrupt Handling”, for more
information on this mechanism.
• A hardware reset initiated by asserting the RESET or INIT pin is a special kind of
interrupt. When a RESET or INIT is signaled while the processor is in virtual-8086
mode, the processor leaves virtual-8086 mode and enters real-address mode.
• Execution of the HLT instruction in virtual-8086 mode will cause a general-
protection (GP#) fault, which the protected-mode handler generally sends to the
virtual-8086 monitor. The virtual-8086 monitor then determines the correct