
💾 레지스터
레지스터의 종류와 역할을 학습하고, 각 레지스터를 통해 명령어가 처리되는 과정을 이해해보자.
- 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장된다.
- 따라서 레지스터의 상태를 살펴보면 CPU 내부에서 어떤 일이 일어나는지를 알 수 있다.
📘 반드시 알아야 할 8개의 주요 레지스터
여러 전공 서적에서 공통적으로 중요하게 다루는 8개의 대표적인 레지스터를 살펴보자.
| 번호 | 레지스터 이름 | 역할 요약 |
|---|
| 1 | 프로그램 카운터 (PC) | 다음에 실행할 명령어의 주소 저장 |
| 2 | 명령어 레지스터 (IR) | 현재 실행 중인 명령어 저장 |
| 3 | 메모리 주소 레지스터 (MAR) | 접근할 메모리 주소 저장 |
| 4 | 메모리 버퍼 레지스터 (MBR/MDR) | 메모리와 주고받는 데이터 저장 |
| 5 | 플래그 레지스터 (FR) | 연산 결과의 상태 정보 저장 |
| 6 | 범용 레지스터 (GPR) | 일반적인 데이터 임시 저장 |
| 7 | 스택 포인터 (SP) | 스택의 꼭대기(top) 위치 저장 |
| 8 | 베이스 레지스터 (BR) | 기준(base) 주소 저장 |
🔹 프로그램 카운터 (Program Counter, PC)
- 다음에 가져올 명령어의 주소를 저장한다.
- 명령어 포인터(Instruction Pointer, IP)라고도 불린다.
- 자료구조에서 포인터가 ‘다음 데이터를 가리키는 역할’을 하는 것과 유사하다.
🔹 명령어 레지스터 (Instruction Register, IR)
- 메모리에서 읽어온 명령어를 일시적으로 저장한다.
- 제어장치는 IR의 명령어를 해석하여 적절한 제어 신호를 발생시킨다.
🔹 메모리 주소 레지스터 (Memory Address Register, MAR)
- 접근할 메모리의 주소를 저장하는 레지스터.
- CPU가 주소 버스를 통해 메모리에 접근할 때, 주소 정보는 MAR을 거쳐 전달된다.
🔹 메모리 버퍼 레지스터 (Memory Buffer Register, MBR / MDR)
- 메모리와 주고받는 데이터나 명령어를 임시 저장한다.
- CPU가 데이터 버스를 통해 주고받는 모든 데이터는 MBR을 통과한다.
🔹 범용 레지스터 (General Purpose Register, GPR)
- 임의의 데이터나 주소를 자유롭게 저장할 수 있는 다목적 레지스터.
- CPU 내부에 여러 개 존재하며, 연산 시 중간 결과를 보관하는 데 사용된다.
🔹 플래그 레지스터 (Flag Register)
- ALU의 연산 결과 상태(부호, 0, 캐리, 오버플로우 등) 를 저장한다.
- CPU가 조건 분기나 예외 처리를 수행할 때 이 정보를 참고한다.
🔹 스택 포인터 (Stack Pointer, SP)
- 스택의 꼭대기(top) 를 가리키는 레지스터.
- 데이터를 스택에 넣거나 꺼낼 때 자동으로 값이 변하며,
스택 주소 지정 방식에서 핵심적인 역할을 한다.
🔹 베이스 레지스터 (Base Register, BR)
- 기준 주소(base address) 를 저장한다.
- 프로그램이나 데이터 블록의 시작점을 나타내며,
변위(Displacement) 주소 지정 방식에서 활용된다.
🧩 참고:
스택 포인터(SP)와 베이스 레지스터(BR)는 주소 지정 방식(Addressing Mode) 에서 특별한 역할을 한다.
주소 지정 방식은 CPU가 연산에 필요한 데이터의 메모리 위치를 찾는 방법을 의미한다.
🧮 특정 레지스터를 이용한 주소 지정 방식
1️⃣ 스택 주소 지정 방식 (Stack Addressing Mode)
- 스택과 스택 포인터(SP) 를 이용하여 데이터를 처리하는 방식.
- 스택은 LIFO(Last In First Out) 구조로,
가장 나중에 들어온 데이터가 먼저 사용된다.
- 프로그램 카운터가 “리스트 구조에서 다음 명령의 위치”를 가리킨다면,
스택 포인터는 “스택 구조에서 다음 명령의 위치”를 가리킨다.
💡 메모리에는 스택으로 사용할 특정 영역이 정해져 있으며,
이 영역은 일반 메모리 공간과 달리 스택 형태(FIFO 구조) 로 사용된다.
2️⃣ 변위 주소 지정 방식 (Displacement Addressing Mode)
- 오퍼랜드 필드 값 + 특정 레지스터 값을 더해 유효 주소를 계산한다.
- 명령어는 일반적으로 연산 코드, 레지스터, 오퍼랜드로 구성된다.
- 어떤 레지스터를 사용하는지에 따라
상대 주소 지정 방식과 베이스 레지스터 주소 지정 방식으로 나뉜다.
🔸 (1) 상대 주소 지정 방식 (Relative Addressing)
- 프로그램 카운터(PC) 와 오퍼랜드 값을 더해 유효 주소를 계산한다.
- PC는 “다음에 읽을 명령어의 주소”를 가지고 있으므로,
+1이면 PC + 1번지의 명령어 실행
-1이면 PC - 1번지의 명령어 실행
예: 분기 명령어(Branch)는 주로 이 방식을 사용한다.
🔸 (2) 베이스 레지스터 주소 지정 방식 (Base Register Addressing)
- 베이스 레지스터(BR) 에는 기준 주소가,
오퍼랜드에는 기준 주소로부터 떨어진 거리가 저장된다.
- 두 값을 더해 유효 주소를 계산하고, 해당 위치의 명령어를 실행한다.
예: 운영체제가 프로그램을 메모리의 여러 위치에 배치할 때 유용하다.
📑 정리
| 구분 | 레지스터 | 주요 역할 |
|---|
| 제어 | 프로그램 카운터 | 다음 명령어 주소 관리 |
| 제어 | 명령어 레지스터 | 현재 명령어 저장 및 해석 |
| 메모리 관련 | 메모리 주소 레지스터 | 접근할 메모리 주소 저장 |
| 메모리 관련 | 메모리 버퍼 레지스터 | 메모리와 데이터 교환 |
| 연산 관련 | 범용 레지스터 | 데이터 임시 저장 및 연산 보조 |
| 상태 관리 | 플래그 레지스터 | 연산 결과 상태 정보 저장 |
| 주소 지정 | 스택 포인터 | 스택의 꼭대기 주소 추적 |
| 주소 지정 | 베이스 레지스터 | 기준 주소 관리 |
✅ 핵심 요약
- 레지스터는 CPU 내부에서 가장 빠르게 접근 가능한 기억장소이다.
- 모든 명령어 처리 과정은 레지스터를 거친다.
- 레지스터는 제어, 연산, 메모리 접근, 주소 계산 등
CPU의 모든 동작의 중심 역할을 수행한다.