CPU 명령어 사이클과 레지스터 동작 이해
CPU가 명령어를 인출·해독·실행·저장하는 명령어 사이클과 PC, IR, MAR, MBR, AC 레지스터의 역할을 정리한다.
2026-08-14 · 최초 발행 2025-12-28
CPU가 명령어를 처리하는 기본 흐름
CPU는 메모리에서 명령어를 읽어 실행하고, 결과를 다시 기록하는 일을 반복한다. 이 반복 단위를 명령어 사이클(Instruction Cycle)이라고 한다. 컴퓨터가 꺼지거나 HALT 명령을 만날 때까지 이 흐름은 계속된다.
명령어 사이클은 Fetch, Decode, Execute, Writeback의 4단계로 구성된다. 프로그램의 복잡한 동작도 하드웨어 관점에서는 이 기본 흐름 위에서 처리된다.
메모리의 명령어가 실행 결과가 되기까지
Fetch: 다음 명령어를 가져온다
Fetch 단계에서는 실행 대상 명령어를 메모리에서 읽는다.
PC(Program Counter)는 다음에 실행할 명령어의 주소를 MAR로 넘긴다. MAR이 가리키는 메모리 위치에서 읽은 명령어는 MBR(Memory Buffer Register)에 임시 저장된 뒤 IR(Instruction Register)로 전달된다. 이후 PC는 다음 명령어 주소를 가리키도록 증가한다.
Decode: 명령어의 의미를 해석한다
IR에 들어온 명령어는 제어 유닛이 분석한다. 이때 명령어는 연산 코드(OpCode)와 피연산자(Operand)로 나뉘며, 어떤 연산을 수행할지와 필요한 데이터가 있는 위치를 판단한다.
Execute: 해독 결과에 따라 하드웨어를 동작시킨다
실행 단계에서는 명령어 종류에 맞는 하드웨어 컴포넌트가 활성화된다. 산술·논리 연산은 ALU(Arithmetic Logic Unit)가 처리하고, 메모리 명령은 읽기 또는 쓰기를 수행한다. 분기 명령은 PC 값을 바꿔 프로그램의 흐름을 제어한다.
Writeback: 실행 결과를 목적지에 남긴다
마지막 단계에서는 실행 결과를 목적지에 기록한다. 목적지는 AC 또는 범용 레지스터일 수 있고, 필요한 경우 메모리에 기록된다. 연산 결과에 따라 Zero, Negative, Carry 등의 상태 플래그도 갱신된다.
간접 주소 지정과 인터럽트를 포함한 CPU 상태 전이
명령어 사이클은 CPU Major State Cycle의 일부로 볼 수 있다. 직접 실행할 수 있는 명령은 Fetch 뒤 Execute로 진행하지만, 간접 주소 지정 방식에서는 실제 주소를 구하기 위한 Indirect 단계가 추가된다. 인터럽트가 발생하면 현재 상태를 저장하고 인터럽트 서비스 루틴을 실행한 뒤 다시 Fetch로 돌아간다.
Fetch Cycle은 FI 단계와 같으며 메모리에서 명령어를 인출한다. Execute Cycle에는 DI, EX, WB 단계가 포함되어 명령어 해석과 실행이 이뤄진다.
Indirect Cycle은 간접 주소 지정 방식에서 실제 데이터 주소를 얻기 위해 추가 메모리 접근이 필요한 중간 단계다. Interrupt Cycle은 외부 또는 내부 인터럽트가 발생했을 때 현재 상태를 저장하고 인터럽트 서비스 루틴을 실행하는 흐름이다.
명령어 전달을 맡는 내부 레지스터
명령어 사이클은 특수 목적 레지스터의 협력으로 진행된다. PC는 다음 명령어의 주소를, IR은 현재 실행 중인 명령어를 보관한다. MAR과 MBR은 메모리 접근에 필요한 주소와 데이터를 전달하며, AC는 연산의 입력과 결과를 임시 저장한다.
| 레지스터 | 영문명 | 역할 |
|---|---|---|
| PC | Program Counter | 다음에 실행할 명령어의 메모리 주소를 저장 |
| IR | Instruction Register | 현재 실행 중인 명령어를 저장 |
| AC | Accumulator | 연산의 입력과 결과를 임시로 저장하는 범용 레지스터 |
| MAR | Memory Address Register | 메모리 접근 시 사용할 주소를 저장하는 버퍼 |
| MBR | Memory Buffer Register | 메모리에서 읽거나 쓸 데이터를 저장하는 버퍼 |
LOAD, ADD, STORE 명령에서 보는 실행 순서
LOAD A → ADD B → STORE C라는 명령어 흐름을 보면 각 단계에서 레지스터와 메모리가 어떻게 연결되는지 확인할 수 있다.
LOAD A
ADD B
STORE C
파이프라인에서 겹쳐 처리하는 명령어 단계
현대 CPU는 파이프라이닝(Pipelining)을 통해 서로 다른 명령어의 단계를 겹쳐 처리한다. 각 단계별로 여러 명령어를 동시에 다룰 수 있어 CPU 자원을 효율적으로 활용하고 처리량(Throughput)을 높일 수 있다.
다만 파이프라인은 데이터 의존성(Data Hazard), 제어 의존성(Control Hazard), 구조적 의존성(Structural Hazard)을 함께 다뤄야 한다.
기본 실행 흐름을 확장하는 CPU 최적화
슈퍼스칼라(Superscalar)는 한 클럭 사이클에 여러 명령어를 동시에 처리하는 방식이다.
비순차 실행(Out-of-Order Execution)은 명령어 사이에 의존성이 없을 때 실행 순서를 바꿔 성능을 높인다. 분기 예측(Branch Prediction)은 조건 분기 명령어의 결과를 미리 예측해 파이프라인 중단을 최소화한다.
명령어 사이클은 CPU가 프로그램을 실행하는 기본 메커니즘이다. Fetch → Decode → Execute → Writeback의 반복을 이해하면, PC·IR·AC·MAR·MBR이 프로그램 실행 과정에서 맡는 역할과 현대 CPU의 최적화 기법이 놓인 기반을 함께 파악할 수 있다.