[ComputerScience] CPU 레지스터
CPU 레지스터
레지스터(Register)는 CPU 내부에 존재하는 매우 빠른 임시 저장장치입니다.
연산 수행 시 필요한 데이터를 일시적으로 저장하거나 제어 정보를 유지하는 역할을 수행합니다.
레지스터는 메모리보다 용량은 작지만 접근 속도가 빠르며, CPU가 명령어를 처리하는 데 핵심적인 역할을 합니다.
디버깅 도구인 WinDbg
, gdb
등을 통해 레지스터 값을 실시간으로 확인할 수 있으며, 프로그램 실행 흐름을 분석할 때 매우 중요한 단서가 됩니다.
레지스터의 일반적 특징
CPU는 명령어 처리 과정에서 레지스터에 데이터를 임시로 저장하거나, 주소 혹은 상태 정보를 유지합니다.
레지스터는 각자 고유한 역할을 가지며, 이름과 기능에 따라 분류됩니다.
명령어 사이클(Fetch Decode Execute)의 각 단계에서 레지스터가 사용됩니다.
주요 레지스터 종류
프로그램 카운터
프로그램 카운터(PC, Program Counter)는 현재 실행중인 명령어의 다음 명령어의 주소를 저장하는 레지스터입니다.
일반적으로 명령어가 실행될 때마다 1씩 증가하며, 이는 연속된 명령어의 실행을 의미합니다.
분기(Branch), 점프(Jump), 함수 호출(Call) 등에서는 프로그램 카운터가 변경됩니다.
일부 아키텍처에서는 IP(Instruction Pointer)라고도 부릅니다.
명령어 레지스터
명령어 레지스터(IR, Instruction Register)는 현재 CPU가 해석 중인 명령어 자체를 저장합니다.
명령어는 메모리에서 인출되어 이 레지스터에 저장되며, 제어 장치(Control Unit)가 해당 명령어를 해석합니다.
이후 해석된 연산에 따라 ALU(산술논리연산장치) 또는 I/O 장치로 제어 신호를 전달합니다.
범용 레지스터
범용 레지스터(GPR, General Purpose Register)는 범용적으로 사용할 수 있는 다목적 레지스터입니다.
연산의 입력 값, 임시 데이터, 명령어, 메모리 주소 등을 저장할 수 있습니다.
대부분의 CPU는 여러 개의 GPR을 가지고 있으며, 어셈블리어나 시스템 프로그래밍 시 자주 사용됩니다.
플래그 레지스터
플래그 레지스터(FR, Flag Register)는 CPU의 연산 상태나 결과에 대한 정보를 나타내는 비트들의 집합입니다.
각 비트를 플래그(Flag)라고 부릅니다.
플래그 레지스터는 상태 레지스터(Status Register)라고도 불립니다.
- 부호 플래그(Sign Flag / SF)
- 연산 결과가 음수인지 여부
- 제로 플래그(Zero Flag / ZF)
- 연산 결과가 0인지의 여부
- 캐리 플래그(Carry Flag / CF)
- 덧셈/뺄셈 시 자리올림 또는 자리내림이 발생했는지 여부
- 오버플로우 플래그(Overflow Flag / OF)
- 오버플로우가 발생했는지의 여부
- 인터럽트 플래그(Interrupt Flag / IF)
- 인터럽트 허용 여부
- 슈퍼바이저 플래그(SuperVisor Flag / S)
- 현재 CPU가 커널 모드, 사용자 모드인지 표시
스택 포인터
스택 포인터(SP, Stack Pointer)는 스택 구조의 최상단 주소를 가리키는 레지스터입니다.
함수 호출 시 지역 변수나 복귀 주소(Return Address)등을 스택에 저장하고, 이 레지스터가 스택의 위치를 추적합니다.
LIFO(후입선출) 방식으로 동작합니다.
대부분 주소가 하향식 구조로 구성되어 있어, 데이터를 Push하면 스택 포인터가 감소합니다.
그 외의 중요 레지스터
- 베이스 레지스터(Base Register)
- 주소 계산 시 기준 주소를 제공
- 인덱스 레지스터(Index Register)
- 배열 처리나 반복 시 주소 보정에 사용
- 링크 레지스터(Link Register)
- 서브루틴 호출 시 복귀 주소 저장
- 컨트롤 레지스터(Control Register)
- 가상 메모리, 보호 모드 등의 CPU 제어 정보를 저장
- 주소 레지스터(Address Register)
- 메모리 주소를 저장, 계산하는 용도의 레지스터를 통칭하는 개념
댓글남기기