Multiprogramming 환경에서는
하나의 메모리와 자원을 여러 프로그램이 동시에 공유하면서 실행되므로
메모리를 겹치거나 낭비 없이 사용하는 것이 중요하다.
➡️ 프로그램은 메모리의 비어있는 어느 위치에나 load될 수 있어야 한다.

이를 위해 Program Relocation이 필요하다.
Program Relocation이란, 프로그램 내에서 사용된 수정이 필요한 주소를
실제 메모리에 적재될 주소로 재배치하는 것이다.
프로그램을 주기억장치 내 어디에나 적재할 수 있도록 해준다.
그러므로 어셈블러는 주소 수정이 필요한 object program의 부분에 대해 로더(loader)에게 알려준다.
이를 통해 만들어지는 object program을 relocatable object program이라고 한다.

위 사진에서 빨간 색으로 밑줄 친 부분이 프로그램 시작 주소가 바뀌면 같이 바뀌어야 하는 주소 필드이다.
어셈블러는 일부 명령어의 주소 필드에 시작 주소를 더하라는 명령을 로더에게 전달한다.
→ 이 명령은 오브젝트 프로그램의 일부로 포함되어 Modification record 형태로 나타난다.
CLEAR SSTL RETADRLoader는 프로그램이 적재되는 시작 주소를 기준으로 한 상대 주소를 계산하여 명령어를 수정한다.
⚠️ 로드 시점에 수정이 필요한 부분은 (주로 Format 4의) direct address를 지정한 부분 뿐이다.
상대 주소 방식은 수정이 필요 없다.
아래 사진은 COPY Program을 Object Program으로 변환한 것이다.

밑줄 친 부분이 Format 4의 direct addressing mode가 사용된 것이다.
주소에 해당하는 마지막 5개의 16진수(20bits)만 바꾸면 된다.
M^000007^05
000074B101036이 시작되는데, 이는 4bytes이다. 그 중 주소는 마지막 5개의 16진수 01036인데, 이를 포함하려면 앞 1byte를 제외한 3bytes를 읽어야 한다.0006 + 0x1 = 0x00007이 된다.0505가 된다. Format 4 Instruction 중 75101000은 immediate addressing mode이고, 피연산자가 메모리 주소가 아니므로 수정할 필요가 없다.