How it works
The 8086 has four dedicated segment registers: CS holds the base of the current code segment, DS points to the default data segment, SS defines the stack base, and ES is the extra segment used mainly by string instructions like MOVSB. Physical Address = (Segment Register × 16) + Offset Register. CS pairs with IP for instruction fetch; DS pairs with BX, SI, or DI for data; SS pairs with SP and BP for stack operations. Segment override prefixes such as ES: or SS: let instructions explicitly use a non-default segment. Each segment can be up to 64 KB in size.
Key points to remember
Each segment register is 16 bits wide, and the physical address formed is always 20 bits, giving a 1 MB address space. The formula Physical Address = Segment × 10H + Offset must be written correctly in exams — the ×10H means a left-shift by 4 bits, not multiplication by 10 decimal. Segments can overlap completely or partially; there is no hardware enforcement of separation in real mode. String instructions LODS, STOS, MOVS default to DS:SI as source and ES:DI as destination. SP always works with SS without any override needed.
Exam tip
The examiner always asks you to calculate the physical address given CS = 1234H and IP = 0100H — the answer is 12440H, not 1334H, so double-check your hex addition every time.