CPU의 중요한 레지스터 개요
1. 레지스터란?
- CPU 내부에 있는 작은 임시 저장 장치입니다.
- 프로그램이 실행되는 동안 명령어와 데이터를 저장 및 처리하는 데 사용됩니다.
- 프로그래머가 직접 관찰하고 조작할 수 있는 중요한 요소 중 하나입니다.

2. 반드시 알아야 할 레지스터의 종류
대부분의 CPU가 공통적으로 포함하고 있는 8가지 주요 레지스터는 다음과 같습니다.
1) 프로그램 카운터 (Program Counter)
- 다음에 실행할 명령어의 메모리 주소를 저장합니다.
- 명령어 실행 후 자동으로 1씩 증가하여 프로그램을 순차적으로 실행할 수 있게 만듭니다.
- 특정 명령어(점프, 호출, 리턴 등)에 의해 주소가 변경될 수 있습니다.
2) 명령어 레지스터 (Instruction Register)
- 현재 CPU가 실행 중인 명령어를 저장합니다.
- 제어장치가 이 레지스터에 있는 명령어를 해석하여 제어 신호를 발생시킵니다.
3) 메모리 주소 레지스터 (Memory Address Register, MAR)
- 메모리의 주소를 저장하는 레지스터입니다.
- CPU가 메모리에 접근할 때, 읽거나 쓸 주소를 이 레지스터에 저장한 후 주소 버스를 통해 메모리로 전송합니다.
4) 메모리 버퍼 레지스터 (Memory Buffer Register, MBR)
- 메모리로부터 읽어온 데이터 또는 메모리에 쓸 데이터를 임시로 저장합니다.
- 데이터 버스를 통해 메모리와 데이터를 주고받는 역할을 합니다.
5) 플래그 레지스터 (Flag Register)
- 연산 결과에 대한 부가 정보를 저장하는 레지스터입니다.
- 주요 플래그:
- 부호 플래그: 결과가 양수인지 음수인지.
- 제로 플래그: 결과가 0인지 아닌지.
- 캐리 플래그: 올림수나 빌림수가 발생했는지.
- 오버플로우 플래그: 연산 결과가 레지스터 범위를 초과했는지.
- CPU 상태를 파악하는 데 중요한 정보를 제공합니다.
6) 범용 레지스터 (General-Purpose Registers)
- 다양한 용도로 사용되는 레지스터입니다.
- 주소, 데이터, 명령어 등 어떤 값이든 저장할 수 있습니다.
- 보통 여러 개의 범용 레지스터가 존재하며, 프로그램 실행 중 임시 저장 공간으로 자주 사용됩니다.
7) 스택 포인터 (Stack Pointer)
- 스택 구조의 꼭대기를 가리키는 레지스터입니다.
- 스택 주소 지정 방식에서 사용됩니다.
- 프로그램 실행 중 함수 호출이나 지역 변수 저장 시 스택에 데이터를 쌓고 빼는 작업을 관리합니다.
- 스택은 메모리의 특정 영역에 위치하며, 데이터가 쌓일 때마다 스택 포인터가 변경됩니다.
8) 베이스 레지스터 (Base Register)
- 기준 주소를 저장하는 레지스터입니다.
- 변위 주소 지정 방식에서 사용됩니다.
- 오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값(기준 주소)을 더하여 유효 주소를 계산합니다.
- 프로그램이 메모리 내에서 상대적으로 다른 위치의 데이터를 참조할 때 유용합니다.
3. 주소 지정 방식 예시
(1) 상대 주소 지정 방식 (Relative Addressing)
- 프로그램 카운터의 값과 오퍼랜드 필드의 값을 더하여 유효 주소를 얻습니다.
- 예시:
- 프로그램 카운터에
1000번지가 저장되어 있고, 오퍼랜드에 -3이 있다면 → 997번지 접근.
(2) 베이스 레지스터 주소 지정 방식 (Base Register Addressing)
- 베이스 레지스터의 값과 오퍼랜드 필드의 값을 더하여 유효 주소를 계산합니다.
- 예시:
- 베이스 레지스터에
1000번지, 오퍼랜드에 50이 있다면 → 1050번지 접근.
4. 요약
- 레지스터는 프로그램 실행 속도와 효율성을 높이기 위해 CPU 내부에서 중요한 역할을 합니다.
- 프로그램 카운터, 명령어 레지스터, 메모리 관련 레지스터, 플래그 레지스터 등 각각의 레지스터는 특정한 기능을 수행합니다.
- 스택 포인터와 베이스 레지스터는 특별한 주소 지정 방식에서 사용됩니다.
이번 강의로 CPU의 레지스터 역할과 종류에 대한 개념을 정리해 보았습니다. 😊
다음 강의에서는 인터럽트와 관련된 동작을 다룰 예정입니다!