Real mode, also called real address mode, is an operating mode of 80286 and later x86-compatible CPUs. Real mode is characterized by a 20 bit segmented memory address space (giving exactly 1 MB of addressable memory) and unlimited direct software access to all memory and I/O addresses and peripheral hardware. Real mode provides no support for memory protection, multitasking, or code privilege levels. 80186 CPUs and earlier, back to the original 8086, have only one operational mode, which is equivalent to real mode in later chips. All x86 CPUs in the 80286 series and later start in real mode when reset.
The 286 architecture introduced protected mode, allowing for (among other things) hardware-level memory protection. Using these new features, however, required a new operating system that was specifically designed for it. Since a primary design specification of x86 microprocessors is that they be fully backwards compatible with software written for all x86 chips before them, the 286 chip was made to start in 'real mode' — that is, in a mode which turned off the new memory protection features, so that it could run operating systems written for the 8086 and the 80186. To this day, even the newest x86 CPUs (including x86-64 CPUs) start in real mode at power-on and can run software written for any previous chip (with a few exceptions due to slight instruction set differences).
The PC BIOS which IBM introduced operates in real mode, as do the DOS operating systems (MS-DOS, DR-DOS, etc.). Early versions of Microsoft Windows ran in real mode, until Windows 386, which ran in protected mode, and the more fully realized Windows 3.0, which could run in either real or protected mode. Windows 3.0 could actually run in two "flavours" of protected mode: "standard mode", which ran using protected mode, and "386-enhanced mode", which is a virtualized version of standard mode and thus would not run on a 286. Windows 3.1 removed support for real mode, and it was the first mainstream operating environment which required at least an 80286 processor. Almost all modern x86 operating systems (Unix, Linux, OS/2, Windows 95 and later, etc.) switch the CPU into protected mode at startup, but 64-bit operating systems will use this only as another stepping stone to get to long mode. It is worth noting that the protected mode of the 80286 is considerably more primitive than the improved protected mode introduced with the 80386; the latter is sometimes called 386 protected mode, and is the mode most modern 32-bit x86 operating systems run in.
The 8086, 8088, and 80186 have a 20-bit address bus, but the unusual segmented addressing scheme Intel chose for these processors actually produces effective addresses which can have 21 significant bits. This scheme shifts a 16-bit segment number left four bits (making a 20-bit number with four least-significant zeros) before adding to it a 16-bit address offset; the maximum sum occurs when both the segment and offset are hexadecimal FFFF, yielding FFFF0h + FFFFh = 10FFEFh. (The small "h" on the end of each number denotes hexadecimal notation.) On the 8086, 8088, and 80186, the result of an effective address that overflows 20 bits is that the address "wraps around" to the zero end of the address range, i.e. it is taken modulo 2^20 (2^20 = 1048576 = 100000h). However, the 80286 has 24 address bits and computes effective addresses to 24 bits even in real mode. Therefore, for the segment FFFFh and offset greater than 000Fh, the 80286 would actually make an access into the beginning of the second binary megabyte of memory, whereas the 80186 and earlier would access an address equal to [offset]-10h ( = [offset]-16 decimal), which is at the beginning of the first megabyte. (Note that on the 80186 and earlier, the first 1 KB of the address space, starting at address 0, is the permanent, immovable location of the interrupt vector table.) So the actual amount of memory addressable by the 80286 and later x86 CPUs in real mode is 1 MB + 64 KB - 16B = 1114095 Bytes.
Full article ▸