Displacement addressing combines direct and register indirect addressing by using an effective address that is the sum of a memory address and the contents of a register plus a displacement value. It provides flexibility but also complexity. For example, if a register contains 20 and the displacement is 2, the effective address is the memory address 1001 plus the register value 20 plus the displacement 2, for a total of 1003. The main uses of displacement addressing are relative addressing using the program counter, base-register addressing where the register contains a base memory address, and indexing where the register provides an offset from a memory address.