[Chapter 04] CPU의 작동 원리 - 2 레지스터

Kim Seohyun·2024년 1월 13일
0
post-thumbnail

프로그램카운터, 명령어레지스터, 메모리 주소/버피 레지스터, 범용/플래그 레지스터, 스택 포인터, 베이스 레지스터
레지스터의 종류와 역할을 학습하고, 각 레지스터를 통해 명령어가 처리되는 과정을 이해합니다.

반드시 알아야 할 레지스터

많은 CPU가 공통으로 포함하고 있는 여덟 개의 레지스터를 알아보자.

1) 프로그램 카운터

프로그램 카운터(PC, Progrma Counter)는 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장한다. 프로그램 카운터를 명령어 포인터(IP, Instruction Pointer)라고 부르기도 한다.

2) 명령어 레지스터

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

3) 메모리 주소 레지스터

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

4) 메모리 버퍼 레지스터

메모리 버퍼 레지스터(MBR, Memory Buffer Register)는 메모리와 주고받을 값을 저장하는 레지스터이다. 즉, 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거친다. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터를 거친다. 메모리 버퍼 레지스터는 메모리 데이터 레지스터(MDR, Memory Data Register)라고도 부른다.

5) 범용 레지스터

범용 레지스터(general purpose register)는 자유롭게 사용할 수 있는 레지스터로, 데이터와 주소를 모두 저장할 수 있다. 일반적으로 CPU 안에는 여러 개의 범용 레지스터들이 있다.

6) 플래그 레지스터

플래그 레지스터(flag register)는 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터이다.

7) 스택 포인터

스택 포인터(stack pointer)에 대한 설명은 아래 '특정 레지스터를 이용한 주소 지정 방식(1): 스택 주소 지정 방식'에서 참고하자.

8) 베이스 레지스터

베이스 레지스터(base register)에 대한 설명은 아래 '특정 레지스터를 이용한 주소 지정 방식(2): 변위 주소 지정 방식'에서 참고하자.

작동 방식 이해하기

메모리에 저장된 프로그램을 실행하는 과정에서 프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터에 어떤 값들이 담기는지 알아보자.

책에 있는 그림을 참고하면 이해가 쉬울 것이다!

  1. CPU를 실행할 프로그램이 1000번지부터 1500번지까지 저장되어 있다고 가정하자. 그리고 1000번지에는 1101(2)이 저장되어 있다고 가정하자.
  2. 프로그램을 처음부터 실행하기 위해 프로그램 카운터에는 1000이 저장된다. 이는 메모리에서 가져올 명령어가 1000번지에 있다는 것을 의미한다.
  3. 1000번지를 읽어 들이기 위해서는 주소 버스로 1000번지를 내보내야 한다. 이를 위해 메모리 주소 레지스터에는 1000이 저장된다.
  4. '메모리 읽기' 제어 신호와 메모리 주소 레지스터 값이 각각 제어 버스와 주소 버스를 통해 메모리로 보내진다.
  5. 메모리 1000번지에 저장된 값은 데이터 버스를 통해 메모리 버퍼 레지스터로 저장되고, 프로그램 카운터는 증가되어 다음 명령어를 읽어 들일 준비를 한다. 이때, 프로그램 카운터 값이 증가한 것이 확인되면 1000번지 명령어 처리가 끝나면 CPU는 다음 명령어인 1001번지를 읽어 들인다.
  6. 메모리 버퍼 레지스터에 저장된 값은 명령어 레지스터로 이동한다.
  7. 제어장치는 명령어 레지스터의 명령어를 해석하고 제어 신호를 발생시킨다.

이 과정이 반복되면서 CPU가 메모리 속 프로그램을 순차적으로 읽어 들이고 실행해 나갈 수 있는 것이다. CPU 속 프로그램 카운터가 꾸준히 증가하기 때문이다. 단, JUMP, CALL 명령어나 인터럽트가 발생하면 순차적인 실행 흐름이 끊길 수 있다.

특정 레지스터를 이용한 주소 지정 방식(1): 스택 주소 지정 방식

특정 레지스터를 이용한 주소 지정 방식(2): 변위 주소 지정 방식

8가지 키워드로 정리하는 핵심 포인트

  • 프로그램 카운터는 메모리에서 가져올 명령어의 주소, 명령어 레지스터는 해석할 명령어를 저장합니다.
  • 메모리 주소 레지스터는 메모리의 주소, 메모리 버퍼 레지스터는 메모리와 주고받을 데이터를 저장합니다.
  • 범용 레지스터는 데이터와 주소를 모두 저장하고, 플래그 레지스터는 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장합니다.
  • 스택 포인터는 스택 최상단의 위치를 저장합니다.
  • 베이스 레지스터에 저장된 주소는 기존 주소로서의 역할을 합니다.
profile
EWHA Cyber Security 19

0개의 댓글