Indexed Addressing:
EA = Base address (hardcoded in the instruction itself) + Index register
The base is a constant baked into the instruction — absolute, fixed. The index register just adds an offset on top (useful for array traversal etc.). Since the base is hardcoded as an absolute address → bad for PIC
Base Register Addressing:
EA = Base register + offset (offset in instruction)
Here the base register is loaded by the OS with the program's starting address at load time. So if the OS relocates the program, it just updates the base register and everything still works. → Good for relocatable code but needs OS intervention (but not as clean as PC-relative)
PC-Relative:
EA = PC + offset
No OS intervention needed, no hardcoded absolute addresses, inherently position-independent. → Best for PIC
So the hierarchy for PIC suitability is:
PC-relative > Base register > Indexed > Direct