There are 4 segment registers on processors before the Intel 80386. The 80386 introduced two more segment registers. Which segment register is used depends on the instruction, on the addressing mode and of an optional instruction prefix which selects the segment register explicitly.

While the standardregister set belongs to the CPU, the segment registers lie "at the boundary" between the CPU and MMU. Each time a new value is loaded into a segment register while in protected mode, the corresponding descriptor is loaded into a descriptor cache in the (Segment-)MMU. On processors before the Pentium this takes longer than just loading the segment register in real mode. Addresses generated by the CPU (which are segment offsets) are passed to the MMU to be checked against the limit in the segment descriptor and are there added to the segment base address in the descriptor to form a linear address.

On a 80386 or later, the linear address is further processed by the paged MMU before the result (the physical address) appears on the chip's address pins. The 80286 doesn't have a paged MMU so the linear address is output directly as the physical address.

The paged MMU allows for arbitrary remapping of four klilobyte memory blocks (pages) through a translation table stored in memory. A few entries of this table are cached in the MMU's Translation Lookaside Buffer to avoid excessive memory accesses.

After processor reset, all processors start in real mode. Protected mode has to be enabled by software. On the 80286 there exists no documented way back to real mode apart from resetting the processor. Later processors allow switching back to real mode by software.

Software which has been written or compiled to run in protected mode must only use segment register values given to it by the operating system. Unfortunately, most applicationcode for MS-DOS, written before the 286, will fail in protected mode because it assumes real mode addressing and writes arbitrary values to segment registers, e.g. in order to perform address calculations.

Such use of segment registers is only really necessary with data structures that are larger than 64 kilobytes and thus don't fit into a single segment. This is usually dealt with by the huge memory model in compilers. In this model, compilers generate address arithmetic involving segment registers. A solution which is portable to protected mode with almost the same efficiency would involve using a table of segments instead of calculating new segment register values ad hoc.