컴퓨터구조_program counter

전우영·2024년 10월 3일
0

PC(Program Counter) 상대 주소는 컴퓨터 시스템에서 주소 지정 방식 중 하나로, 특정 명령어의 실행에 필요한 메모리 주소를 계산할 때 프로그램 카운터(PC) 값을 기준으로 한 상대적인 주소를 사용하는 방식입니다.

개념

  • PC(Program Counter)는 현재 실행 중인 명령어의 주소를 저장하는 레지스터입니다. 명령어가 실행될 때마다 다음 명령어의 주소로 자동으로 업데이트됩니다.
  • 상대 주소(relative address)는 절대적인 메모리 주소 대신, 어떤 기준점으로부터의 오프셋(offset)을 의미합니다.
  • PC 상대 주소는 명령어가 실행 중일 때 PC에 저장된 값을 기준으로 특정 메모리 위치에 접근하는 방식입니다. 즉, 명령어의 위치를 기준으로 얼마만큼 떨어진 메모리 주소로 이동해야 하는지를 지정합니다.

PC 상대 주소 사용 예

PC 상대 주소는 주로 분기(branch) 명령어에서 많이 사용됩니다. 분기 명령어는 프로그램이 특정 조건을 만족하면 실행 흐름을 다른 메모리 위치로 변경할 때 사용되는데, 이때 이동할 주소를 PC를 기준으로 상대적으로 지정할 수 있습니다.

예를 들어, 다음과 같은 분기 명령어가 있다고 가정합니다:

beq $t0, $t1, Label
  • 이 명령어는 $t0$t1 레지스터가 같으면 Label로 분기하는 명령입니다.
  • PC 상대 주소 방식에서는 Label의 실제 메모리 주소를 명시하지 않고, 현재 명령어 주소(PC)에서 Label까지의 거리(오프셋)를 사용합니다.
  • 즉, 분기할 주소는 PC + 오프셋이 되어 PC에 저장된 값에서 지정된 오프셋만큼 이동하여 새로운 명령어로 점프합니다.

장점

  1. 코드 이식성: 절대 주소를 사용하지 않으므로, 프로그램이 다른 메모리 위치로 로드되더라도 분기 명령어는 여전히 올바르게 작동합니다. 이는 운영 체제가 프로그램을 다양한 메모리 위치에 로드할 수 있게 하고, 프로그램이 독립적인 메모리 공간에서 실행될 수 있도록 합니다.

  2. 메모리 효율성: PC 상대 주소 방식은 분기와 점프 명령에서 주소를 간단히 처리할 수 있어, 코드 크기를 줄이고 메모리 사용을 최적화할 수 있습니다.

  3. 동적 재배치: PC를 기준으로 하는 상대 주소 방식은 프로그램이 메모리 상에서 어느 위치에 로드되더라도 동일하게 동작하게 하며, 프로그램을 런타임에 재배치할 수 있습니다.

예시

MIPS 어셈블리에서 PC 상대 주소는 보통 분기 명령어에서 사용됩니다. 예를 들어, 다음 MIPS 코드를 보세요:

  beq $t0, $t1, label  # t0와 t1이 같으면 label로 분기
  add $t2, $t2, $t3    # 그렇지 않으면 이 명령어 실행
label:
  sub $t4, $t5, $t6    # 분기 후 label에서 이 명령어 실행

여기서, label로 분기하는 것은 PC + offset으로 계산되며, 이는 절대 주소가 아니라 상대 주소로 지정됩니다.

결론

PC 상대 주소는 프로그램의 명령어들이 실행되는 과정에서 PC 레지스터를 기준으로 한 오프셋을 사용하여 분기, 점프 등을 처리하는 방식입니다. 이를 통해 코드의 이식성을 높이고 메모리 효율성을 향상시킬 수 있습니다.

profile
신입개발자지원자희망자

0개의 댓글