컴퓨터 과학

[컴퓨터 구조] CPU - 레지스터

Data Jun 2025. 11. 23. 11:30

CPU 내부에는 매우 빠르게 접근 가능한 작은 저장 공간인 레지스터(Register) 가 존재한다.
메모리보다 훨씬 빠른 접근 속도를 가지고 있어 프로그램 실행 과정에서 핵심적인 역할을 담당한다.

 

이번 글에서는 레지스터의 개념 → 주요 레지스터 종류 → 플래그 레지스터 구조 → 스택 포인터까지 한 번에 정리해본다.

 

1. 레지스터란

레지스터는 CPU 내부에 존재하는 초고속 임시 저장장치이다.

 

✔ 레지스터의 특징

  • 메모리(RAM)보다 훨씬 작지만 훨씬 빠르다.
  • CPU는 프로그램 수행 중 필요한 값(데이터, 주소, 명령어)을 레지스터에 저장하여 처리 속도를 높인다.
  • 디버거(WinDbg, gdb)를 통해 현재 레지스터의 상태를 직접 확인할 수도 있다.

 

2. 주요 레지스터 종류

 

1️⃣ 프로그램 카운터 (PC, Program Counter)

 

프로그램 카운터는 다음에 실행할 명령어의 주소를 가지고 있는 레지스터이다.

 

✔ 프로그램 카운터의 역할

  • 현재 프로그램에서 어떤 명령어가 다음에 실행될 것인지를 결정한다.
  • 명령어가 하나 실행될 때마다 보통 PC 값은 자동으로 +1 증가한다.
  • 일부 CPU는 PC를 Instruction Pointer(IP) 라고 부르기도 한다.

2️⃣ 명령어 레지스터 (IR, Instruction Register)

 

명령어 레지스터는 방금 메모리에서 읽어온 명령어를 저장하는 레지스터이다.

 

✔ IR 역할 요약

  • 메모리에서 가져온 명령어를 잠시 보관
  • 제어장치는 IR에 저장된 명령어를 해석
  • 해석한 내용에 따라 ALU(산술논리연산장치)나 다른 CPU 구성 요소로 제어 신호 전달

3️⃣ 범용 레지스터 (General Purpose Register)

 

범용 레지스터는 일반적인 작업에 자유롭게 사용되는 레지스터이다.

  • 데이터를 저장
  • 주소를 저장
  • 연산 중간값을 저장
  • 여러 개 존재 (예: x86의 eax, ebx, ecx, edx 등)

 

3. 플래그 레지스터 (Flag Register)

플래그 레지스터는 연산 결과 또는 CPU 상태에 대한 추가 정보를 저장하는 비트들의 집합이다.

각 비트는 특정한 의미를 가지며, 이 값들을 통해 CPU는 다음 명령어 수행 여부나 조건 분기를 결정한다.

 

1️⃣ 플래그 레지스터 도식

 

아래는 플래그 레지스터를 비트 단위로 표현한 시각적 구조이다.

┌───────────────────────────────────────────────────────────────┐
│  부호  │  제로  │  캐리  │ 오버플로우 │ 인터럽트 │ 슈퍼바이저 │ 예약 │ ... │
│ (SF)  │ (ZF)   │ (CF)  │   (OF)      │   (IF)    │   (SF)      │ ... │ ... │
├───────┼────────┼────────┼─────────────┼───────────┼─────────────┼─────┼─────┤
│   0   │   1    │   0    │      0      │     0     │      0      │ ... │ ... │
└───────────────────────────────────────────────────────────────┘

각 비트 의미 요약

  • 부호 플래그(SF) : 연산 결과가 음수인지 양수인지
  • 제로 플래그(ZF) : 연산 결과가 0인지 여부
  • 캐리 플래그(CF) : 자리올림/자리내림 발생 여부
  • 오버플로우 플래그(OF) : 연산 오버플로우 발생 여부
  • 인터럽트 플래그(IF) : 인터럽트 가능 여부
  • 슈퍼바이저 플래그(SF) : 커널 모드인지 사용자 모드인지

 

4. 스택 포인터 (Stack Pointer)

 

스택 포인터는 메모리의 스택 영역에서 가장 최근에 push된 데이터(즉, 스택의 top)를 가리킨다.

 

스택은 LIFO(Last-In-First-Out) 구조이므로,

  • push(데이터 삽입) → 스택 포인터가 위로 이동
  • pop(데이터 제거) → 스택 포인터가 아래로 이동

1️⃣ 스택 포인터 도식도

메모리 (Stack 영역)
┌───────────────┐  ← 높은 메모리 주소
│               │
│   (비어있음)   │
│---------------│
│  스택 데이터3 │ ← SP (Stack Pointer: top)
│---------------│
│  스택 데이터2 │
│---------------│
│  스택 데이터1 │
└───────────────┘  ← 낮은 메모리 주소

스택 포인터(SP)는 항상 스택의 가장 위(top) 를 가리킨다.

 

 

정리하면

레지스터 종류 기능
PC(프로그램 카운터) 다음에 실행할 명령어 주소 저장
IR(명령어 레지스터) 방금 가져온 명령어 저장
범용 레지스터 데이터/주소 등 작업용
플래그 레지스터 연산 결과 상태를 단일 비트로 저장
스택 포인터 스택의 최상단 데이터 주소 저

CPU 레지스터는 프로그램 실행의 “핵심 좌석”이라고 할 수 있다.
CPU가 무엇을 하고 있는지 진짜로 이해하려면 레지스터를 이해하는 것이 필수적이다.