Memory Ranges
The original IBM PC used an 8088 processor, which supported up to 1 MB of physical memory, addressed as sixteen 64 KB segments. Memory locations are enumerated in hexadecimal, so the first segment includes the addresses 00000h through 0FFFFh (0 through 65,535 decimal) and the 16th includes the addresses F0000h through FFFFFh (983,040 through 1,048,575 decimal). The first 10 of those segments—00000h through 9FFFFh—comprise the base 640 KB of memory addresses that are accessible by the operating system and programs. The last six segments—A0000h through FFFFF—comprise the 384 KB of upper memory addresses (the Upper Memory Area or UMA) reserved for system use. The first two UMA segments (A0000h through BFFFFh) are reserved for video memory. The second two UMA segments (C0000h through DFFFFh) are reserved address space for ROM BIOSs that reside on some adapters, such as video cards, SCSI host adapters, and network adapters. The final two UMA segments (E0000h through FFFFF) are reserved for the motherboard BIOS.
Modern processors use a flat (unsegmented) 32-bit address space, which allows them to access up to 4 GB (4096 MB, or 4,294,967,296 bytes) of distinct memory addresses. That additional address space means that memory addresses are expressed as eight rather than five hexadecimal characters (e.g., addresses for the first MB are expressed as 00000000h through 000FFFFFh). Because few systems have anywhere near 4 GB of physical memory installed, huge ranges of unused ...