THE ANSWER IS C.
Let us consider the following code.
Let the base register be updated with the value 203
address code
200 ADD B,M[400] // absolute addressing
201 ADD C,M[M[400]]// indirect addressing
202 ADD C,PC(197)// relative addressing mode
203 ADD A, 197(base register) //base register addressing mode.
400 420
-
-
420 600
421 halt.
NOW LET THE CODE BE SHIFTED TO LOCATION 700.
And let addresses 200-421 be loaded with some other code
Let the base register be updated with the value 203
address code
500 ADD B,M[400] // absolute addressing
501 ADD C,M[M[400]] // indirect addressing
502 ADD C,PC(197) // relative addressing mode
503 ADD A, 197(base register) //base register addressing mode.
-
700 420
-
-
720 600
721 halt.
Absolute addressing mode.& indirect addressing mode.
When the code at address 700 is executed then we observe that it tries to fetch the operand at 400.But the physical address space of the code does not contain 400.hence it tries to access an invalid address.
Simlilar thing happens when it tries to access 400 for indirect addressing mode.
PC Relative.
we see that we can execute the code ADD C,PC(197) and it gives perfectly valid values even when it is shifted.
Base Register .
we see that we can execute the code ADD A,197(base register) and it gives perfectly valid values even when it is shifted. We just need to update the base register.
Here I am only considering the validity of each individual line and wheather the lines will be executed when relocated.
Please revert back if u find anything wrong or can give extra information :).