There are four types of addressing modes: immediate, register, direct, and indirect. Immediate mode embeds the operand in the instruction itself, requiring no memory reference. Register mode uses CPU registers to hold operands, allowing for very short instructions but limiting the number of registers. Direct mode specifies the exact memory address of the operand, requiring a single memory reference. Indirect mode specifies the memory address where the effective address of the operand is stored, requiring multiple memory references to fetch the operand. Register mode is the fastest as it only requires a small address field and no memory references. Addressing modes allow for program relocation, use of pointers in memory, and reduction in instruction size.