The processor executes in V86 mode when the VM (virtual machine) bit in the EFLAGS register is set. The processor tests this flag under two general conditions:
The register set available in V86 mode includes all the registers defined for the 8086 plus the new registers introduced by the 80386: FS, GS, debug registers, control registers, and test registers. New instructions that explicitly operate on the segment registers FS and GS are available, and the new segment-override prefixes can be used to cause instructions to utilize FS and GS for address calculations. Instructions can utilize 32-bit operands through the use of the operand size prefix.
8086 programs running as V86 tasks are able to take advantage of the new applications-oriented instructions added to the architecture by the introduction of the 80186/80188, 80286 and 80386:
- New instructions introduced by 80186/80188 and 80286. -- PUSH immediate data -- Push all and pop all (PUSHA and POPA) -- Multiply immediate data -- Shift and rotate by immediate count -- String I/O -- ENTER and LEAVE -- BOUND - New instructions introduced by 80386. -- LSS, LFS, LGS instructions -- Long-displacement conditional jumps -- Single-bit instructions -- Bit scan -- Double-shift instructions -- Byte set on condition -- Move with sign/zero extension -- Generalized multiply
In V86 mode, the 80386 processor does not interpret 8086 selectors by referring to descriptors; instead, it forms linear addresses as an 8086 would. It shifts the selector left by four bits to form a 20-bit base address. The effective address is extended with four high-order zeros and added to the base address to create a linear address as Figure 15-1 illustrates.
Because of the possibility of a carry, the resulting linear address may contain up to 21 significant bits. An 8086 program may generate linear addresses anywhere in the range 0 to 10FFEFH (one megabyte plus approximately 64 Kbytes) of the task's linear address space.
V86 tasks generate 32-bit linear addresses. While an 8086 program can only utilize the low-order 21 bits of a linear address, the linear address can be mapped via page tables to any 32-bit physical address.
Unlike the 8086 and 80286, 32-bit effective addresses can be generated (via the address-size prefix); however, the value of a 32-bit address may not exceed 65,535 without causing an exception. For full compatibility with 80286 real-address mode, pseudo-protection faults (interrupt 12 or 13 with no error code) occur if an address is generated outside the range 0 through 65,535.
19 3 0 +---------------------------------+---------+ BASE | 16-BIT SEGMENT SELECTOR | 0 0 0 0 | +---------------------------------+---------+ + 19 15 0 +---------+---------------------------------+ OFFSET | 0 0 0 0 | 16-BIT EFFECTIVE ADDRESS | +---------+---------------------------------+ = 20 0 LINEAR +---------------------------------------------+ ADDRESS | X X X X X X X X X X X X X X X X X X X X X X | +---------------------------------------------+