The effect is to segment memory into blocks, which may overlap either partially or completely, depending on the contents of the segment registers but normally they would be distinct to give access to the maximum total range of addresses. In this case the scheme does provide some degree of memory protection within a single process since, for example, a data reference cannot affect an area of memory containing code. However, compilers must either generate slower code or code with artificial limits on the size of data structures.
The best known implementation is that used on the Intel 8086 and later Intel microprocessors, where a 16-bit offset is added to a 16-bit base address held in one of four segment base registers. Each instruction has a default segment (code (CS), data (DS), stack (SS), ? (ES)) which determines which segment register is used. Special prefix instructions allow this default to be overridden.
Other computers, such as GE-645/Honeywell Multics, Burroughs large systems (B-5500, B-6600), and others, have used segmentation to good effect.
[In what way were the others better than Intel's brain damaged implementation?].