레지스터

최건우·2023년 1월 28일
0

레지스터

레지스터는 프로그램 속의 명령어와 데이터를, 프로그램 실행 전/후로 저장한다. 따라서 레지스터를 통해 프로그램의 실행 과정을 파악할 수 있다.

레지스터는 그 종류가 다양하고 각기 다른 역할을 수행한다.

반드시 알아야 할 레지스터

1. 프로그램 카운터

  • Program Conter(PC): 메모리에서 읽어들일 명령어의 주소를 저장.
  • 어떤 CPU에서는 PC를 명령어 포인터(IP: Instruction Pointer)라고도 부른다.

2. 명령어 레지스터

  • Instruction Register(IR): 방금 메모리에서 읽어들인 명령어를 저장하는 레지스터.
  • 제어장치는 IR 안에 있는 명령어를 받아들이고 해석한 뒤 제어 신호를 보낸다.

3. 메모리 주소 레지스터

  • Memory Address Register(MAR): 메모리의 주소를 저장하는 레지스터.
  • CPU가 읽어들이고자 하는 주소 값을 주소 버스로 보낼 때, 이곳을 거치게 된다.

4. 메모리 버퍼 레지스터

  • Memory Buffer Register(MBR): 메모리와 주고받을 값(데이터, 명령어)을 저장하는 레지스터.
  • 메모리에 쓰고 싶은 값은 이곳을 거쳐 데이터 버스로 보낸고, 메모리로부터 데이터 버스를 통해 값을 전달받을 때도 여기를 거친다.

5. 범용 레지스터

  • General Purpose Register: 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터.
  • 데이터와 주소를 모두 저장할 수 있다.
    • cf. MBR: 데이터 버스로 주고받을 값만 저장
    • cf. MAR: 주소 버스로 내보낼 주소값만 저장
  • CPU 안에는 여러 개의 범용 레지스터가 있다.

6. 플래그 레지스터

  • ALU 연산 결과에 따른 플래그를 저장하는 레지스터.
  • 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장.

7. 스택 포인터

  • 스택 주소 지정 방식이라는 주소 지정 방식에 사용됨.

스택 주소 지정 방식

  • 스택, 스택 포인터를 이용한 주소 지정 방식.
  • 스택은 메모리 안에 스택처럼 사용할 영역으로 지정된 스택 영역이라는 곳에 있다. 이 영역은 다른 주소 공간과는 달리, 스택처럼만 사용하게 된다.
  • 스택 포인터는 스택의 꼭대기를 가리키는 레지스터. 즉, 스택에 마지막으로 저장한 값의 위치를 저장함.
    • 만약 스택에서 데이터를 하나 꺼낸다면, 꼭대기의 주소가 달라지므로 스택 포인터가 가리키는 주소는 그 아래 주소로 변경된다.
    • 반대로, 스택에 데이터를 하나 추가한다면, 스택 포인터가 가리키는 주소는 그 위 주소로 변경된다.

8. 베이스 레지스터

  • 프로그램 카운터와 함께 변위 주소 지정 방식 이라는 주소 지정 방식에 사용됨.

변위 주소 지정 방식

  • displacement addressing mode: 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식.
  • 이 주소 지정 방식을 사용하는 명령어는 세 가지 필드를 가진다.
    • 레지스터 필드: 이 레지스터의 값과
    • 오퍼랜드 필드: 이 주소를 더한 곳에 있는 데이터로
    • 연산 코드 필드: 이런 내용을 수행하라
  • 이 지정 방식은 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라 더 세부적으로 나뉜다. 다양한 세부 지정 방식 중 대표적인 것은 다음 두 개와 같다.
    • 상대 주소 지정 방식(Relative addressing mode)
      • 오퍼랜드와 프로그램 카운터의 값(=읽어들일 명령어의 주소)을 더하여 유효 주소를 얻는 방식.
        • 오퍼랜드가 -3이었다면, CPU는 실행하려는 명령어의 세 번째 이전 번지로 접근한다.
        • 오퍼랜드가 3이었다면, CPU는 실행하려는 명령어의 세 번째 이후 번지로 접근한다.
      • if문처럼, 분기하여 특정 주소의 코드를 실행할 때 사용된다.
    • 베이스 레지스터 주소 지정 방식(Base-register addressing mode)
      • 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식.
      • 베이스 레지스터 속 기준 주소로부터 오퍼랜드만큼 떨어진 주소에 접근하여 유효 주소를 얻는 방식.
        • 기준 주소가 200, 오퍼랜드가 40이라면 "기준 주소로부터 40만큼 떨어진 240으로 접근하라"라는 의미.
상기에 언급된 8가지 레지스터 종류, 2가지의 특정 레지스터를 이용한 주소 지정 방식을 잘 기억하자.

[레지스터 종류]
1. 프로그램 카운터
2. 명령어 레지스터
3. 메모리 주소 레지스터
4. 메모리 버퍼 레지스터
5. 범용 레지스터
6. 플래그 레지스터
7. 스택 포인터
8. 베이스 레지스터

[특정 레지스터를 이용한 주소 지정 방식]
1. 스택 주소 지정 방식
2. 변위 주소 지정 방식
  - 상대 주소 지정 방식
  - 베이스 레지스터 주소 지정 방식




*이 글은 '혼자 공부하는 컴퓨터 구조+운영체제(한빛미디어, 2022)'를 개인적인 학습을 목적으로 요약한 게시글입니다. 문제가 있는 경우, 지적해 주시면 감사하겠습니다.
profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글