개발/CS

CPU - 레지스터

쪼르뚜 2025. 5. 20. 15:46
728x90
반응형

 

⭐ 이 포스팅은 위 책의 Chapter02 컴퓨터 구조 - CPU (66p ~ 69p) 분량의 내용을 정리했습니다.

 

CPU

CPU는 Central Processing Unit의 약자로, 중앙 처리 장치라고 합니다. 컴퓨터의 모든 작업은 '수행'하는 부품으로 컴퓨터가 작동하려면 반드시 필요한 핵심 부품입니다.

레지스터

레지스터는 CPU 안에 있는 작은 임시 저장장치입니다. CPU 안에는 다양한 레지스터들이 있고, 각기 다른 이름역할이 있습니다. 프로그램을 이루는 데이터와 명령어가 프로그램의 실행 전후로 레지스터에 저장되기 때문에 레지스터에 저장된 값만 잘 관찰해도 비교적 낮은 수준의 프로그램이 어떻게 작동하는지를 파악할 수 있습니다.

1. 프로그램 카운터

프로그램 카운터(PC, Program Counter)메모리에서 다음으로 읽어 들일 명령어의 주소를 저장합니다. 프로그램 카운터를 명령어 포인터(IP, Instruction Pointer)라고 부르는 CPU도 있습니다. 일반적으로 프로그램 카운터는 1씩 증가하는데, 이는 곧 다음으로 읽어 들일 메모리 주소가 1씩 증가하는 것과 같습니다. 메모리에 저장된 프로그램이 순차적으로 실행될 수 있는 것은 근본적으로 프로그램 카운터 값이 1씩 증가하며 실행되기 때문입니다.

 

 

다만, 프로그램 카운터가 언제나 증가만 하는 것은 아닙니다. 프로그래밍 언어의 조건이 참이 되거나 리턴문을 실행하는 경우 프로그램이 순차적으로 실행되지 않습니다. 이렇게 프로그램의 실행 흐름이 순차적이지 않을 때는 프로그램 카운터 값이 임의의 위치로 변경됩니다.

 

 

2. 명령어 레지스터

명령어 레지스터(IR, Instruction Register)해석할 명령어, 즉 메모리에서 방금 읽어 들인 명령어를 저장하는 레지스터입니다. CPU 내의 제어장치는 명령어 레지스터 속 명령어를 해석한 뒤 ALU(산술논리연산장치)로 하여금 연산하도록 시키거나 다른 부품으로 제어 신호를 보내 해당 부품을 작동시킵니다.

3. 범용 레지스터

범용 레지스터(general purpose register)는 이름 그대로 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터입니다. 데이터와 명령어, 주소 모두를 저장할 수 있습니다. 일반적으로 CPU 안에는 여러개의 범용 레지스터들이 있습니다.

4. 플래그 레지스터

플래그 레지스터(flag register)는 연산의 결과 혹은 CPU 상태에 대한 부가 정보인 플래그(flag) 값을 저장하는 레지스터입니다. 플래그는 CPU가 명령어를 처리하는 과정에서 반드시 참조해야 할 상태 정보를 의미하는 비트입니다. 대표적인 플래그의 종류는 다음과 같습니다.

 

종류 설명 사용 예시
부호 플래그 연산 결과의 부호 1 : 연산 결과는 음수
0 : 연산 결과는 양수
제로 플래그 연산 결과가 0인지의 여부 1 : 연산 결과는 0
0 : 연산 결과는 0이 아님
캐리 플래그  연산 결과에 올림수나 빌림수가 발생했는지의 여부 1 : 연산 결과에 올림수나 빌림수가 발생
0 : 발생하지 않았음
오버플로우 플래그 오버플로우가 발생했는지의 여부 1 : 오버플로우가 발생
0 : 발생하지 않았음
인터럽트 플래그 인터럽트가 가능한지의 여부 1 : 인터럽트가 가능함
0 : 인터럽트가 불가능함
슈퍼바이저 플래그 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지의 여부 1 : 커널 모드로 실행 중
0 : 사용자 모드로 실행 중

 

5. 스택 포인터

메모리에는 실행 중인 프로그램들이 적재되어 있으며, 실행 중인 각 프로그램들은 스택과 같은 형태로 사용 가능한 주소 공간을 하나 이상 가지고 있습니다. 암묵적으로 스택처럼 사용하자고 약속된 이 메모리 영역을 스택 영역이라고 합니다. 스택 포인터(stack pointer)란 메모리 내 스택 영역의 최상단 스택 데이터 위치를 가리키는 특별한 레지스터를 말합니다. 스택 포인터는 마지막으로 스택에 저장된 데이터의 위치를 가리키는 레지스터이자, 스택이 채워진 정도를 나타내는 레지스터인 셈입니다.

728x90
반응형