레지스터
CPU 안에 있는 작은 임시 저장장치
- 프로그램을 이루는 “데이터 & 명령어”가 프로그램의 실행 전후로 레지스터에 저장함
(즉, 레지스터에 저장된 값만 잘 관찰해도 비교적 낮은 수준의 프로그램이 어떻게 작동하는지 파악 가능)
- 각 레지스터는 저마다의 역할을 갖고 각자의 역할에 알맞은 내용들을 저장
<aside>
<img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />
CPU를 구성하는 레지스터들의 세세한 종류와 이름은 조금씩 다름. 아래에서 살펴볼 레지스터들은 대부분의 CPU가 공통적으로 포함하고 있는 대표적인 주요 레지스터에 해당
</aside>
1️⃣ 프로그램 카운터(명령어 포인터)
메모리에서 다음으로 읽어 들일 명령어 주소를 저장하는 레지스터
- 일반적으로 프로그램 카운터는 1씩 증가(= 다음으로 읽어 들일 메모리 주소가 1씩 증가)
- 다만, 조건문이나 리턴문을 만나는 경우, 프로그램이 순차적으로 실행되지 않음 → 프로그램 카운터 값이 임의 위치로 변경
2️⃣ 명령어 레지스터
해석할 명령어(메모리에서 방금 읽어 들인 명령어)를 저장하는 레지스터
- CPU 내 제어장치가 명령어 레지스터 속 명령어를 해석한 뒤, ALU로 하여금 연산하도록 시키거나 다른 부품으로 제어 신호를 보내 해당 부품을 작동시킴
3️⃣ 범용 레지스터
일반적인 상황에서 자유롭게 사용 가능한 레지스터
- 데이터, 명령어, 주소 모두 저장 가능
- 일반적으로 CPU 내에는 여러 개의 범용 레지스터가 존재
4️⃣ 플래그 레지스터
연산 결과 또는 CPU 상태에 대한 부가 정보(플래그) 값을 저장하는 레지스터
- 플래그 : CPU가 명령어를 처리하는 과정에서 반드시 참조해야 할 상태 정보를 의미하는 비트
- 매우 다양한 플래그 종류가 존재 :
부호 플래그, 제로 플래그, 캐리 플래그, 오버플로우 플래그, 인터럽트 플래그, 슈퍼바이저 플래그
- EX : CPU의 연산 직후 플래그 레지스터 내 부호 플래그가 1이 되었다면, 연산 결과가 음수임을 의미
5️⃣ 스택 포인터