CPU 명령어 사이클과 레지스터 동작 이해

CPU가 명령어를 인출·해독·실행·저장하는 명령어 사이클과 PC, IR, MAR, MBR, AC 레지스터의 역할을 정리한다.

2026-08-14 · 최초 발행 2025-12-28

CPU가 명령어를 처리하는 기본 흐름

CPU는 메모리에서 명령어를 읽어 실행하고, 결과를 다시 기록하는 일을 반복한다. 이 반복 단위를 명령어 사이클(Instruction Cycle)이라고 한다. 컴퓨터가 꺼지거나 HALT 명령을 만날 때까지 이 흐름은 계속된다.

명령어 사이클은 Fetch, Decode, Execute, Writeback의 4단계로 구성된다. 프로그램의 복잡한 동작도 하드웨어 관점에서는 이 기본 흐름 위에서 처리된다.

Fetch(인출)Decode(해독)Execute(실행)Writeback(쓰기)

메모리의 명령어가 실행 결과가 되기까지

Fetch: 다음 명령어를 가져온다

Fetch 단계에서는 실행 대상 명령어를 메모리에서 읽는다.

"IR(Instruction Register)""MBR(Memory Buffer Register)""Memory""MAR(Memory Address Register)""PC(Program Counter)""IR(Instruction Register)""MBR(Memory Buffer Register)""Memory""MAR(Memory Address Register)""PC(Program Counter)"명령어 주소 전달주소로 접근명령어 데이터 전달명령어 저장PC = PC + 1 (다음 명령어 주소)

PC(Program Counter)는 다음에 실행할 명령어의 주소를 MAR로 넘긴다. MAR이 가리키는 메모리 위치에서 읽은 명령어는 MBR(Memory Buffer Register)에 임시 저장된 뒤 IR(Instruction Register)로 전달된다. 이후 PC는 다음 명령어 주소를 가리키도록 증가한다.

Decode: 명령어의 의미를 해석한다

IR에 들어온 명령어는 제어 유닛이 분석한다. 이때 명령어는 연산 코드(OpCode)와 피연산자(Operand)로 나뉘며, 어떤 연산을 수행할지와 필요한 데이터가 있는 위치를 판단한다.

IR에 저장된명령어명령어 해독기(Instruction Decoder)연산 코드(Operation Code)피연산자(Operand)제어 신호 생성주소 계산ALU 동작 결정레지스터 선택

Execute: 해독 결과에 따라 하드웨어를 동작시킨다

실행 단계에서는 명령어 종류에 맞는 하드웨어 컴포넌트가 활성화된다. 산술·논리 연산은 ALU(Arithmetic Logic Unit)가 처리하고, 메모리 명령은 읽기 또는 쓰기를 수행한다. 분기 명령은 PC 값을 바꿔 프로그램의 흐름을 제어한다.

실행 유형산술/논리 연산ALU에서연산 수행메모리 접근메모리 읽기/쓰기제어 흐름분기/점프 처리결과 생성

Writeback: 실행 결과를 목적지에 남긴다

마지막 단계에서는 실행 결과를 목적지에 기록한다. 목적지는 AC 또는 범용 레지스터일 수 있고, 필요한 경우 메모리에 기록된다. 연산 결과에 따라 Zero, Negative, Carry 등의 상태 플래그도 갱신된다.

레지스터메모리상태 플래그실행 결과저장 위치는?레지스터(AC, 범용 레지스터)메모리플래그 레지스터(Zero, Carry, 등)명령어 완료다음 명령어사이클로

간접 주소 지정과 인터럽트를 포함한 CPU 상태 전이

명령어 사이클은 CPU Major State Cycle의 일부로 볼 수 있다. 직접 실행할 수 있는 명령은 Fetch 뒤 Execute로 진행하지만, 간접 주소 지정 방식에서는 실제 주소를 구하기 위한 Indirect 단계가 추가된다. 인터럽트가 발생하면 현재 상태를 저장하고 인터럽트 서비스 루틴을 실행한 뒤 다시 Fetch로 돌아간다.

시작간접 주소 지정직접 실행 가능실제 주소 계산 완료인터럽트 발생정상 완료인터럽트 처리 완료FetchIndirectExecuteInterruptFetch Cycle:메모리에서 명령어 인출Execute Cycle:명령어 실행Indirect Cycle:간접 주소 지정 처리Interrupt Cycle:인터럽트 서비스 루틴

Fetch Cycle은 FI 단계와 같으며 메모리에서 명령어를 인출한다. Execute Cycle에는 DI, EX, WB 단계가 포함되어 명령어 해석과 실행이 이뤄진다.

Indirect Cycle은 간접 주소 지정 방식에서 실제 데이터 주소를 얻기 위해 추가 메모리 접근이 필요한 중간 단계다. Interrupt Cycle은 외부 또는 내부 인터럽트가 발생했을 때 현재 상태를 저장하고 인터럽트 서비스 루틴을 실행하는 흐름이다.

명령어 전달을 맡는 내부 레지스터

명령어 사이클은 특수 목적 레지스터의 협력으로 진행된다. PC는 다음 명령어의 주소를, IR은 현재 실행 중인 명령어를 보관한다. MAR과 MBR은 메모리 접근에 필요한 주소와 데이터를 전달하며, AC는 연산의 입력과 결과를 임시 저장한다.

CPU 내부 레지스터PC(Program Counter)다음 명령어 주소IR(Instruction Register)현재 명령어AC(Accumulator)연산 결과 임시 저장MAR(Memory Address Register)메모리 주소 버퍼MBR(Memory Buffer Register)메모리 데이터 버퍼메모리제어 유닛ALU
레지스터 영문명 역할
PC Program Counter 다음에 실행할 명령어의 메모리 주소를 저장
IR Instruction Register 현재 실행 중인 명령어를 저장
AC Accumulator 연산의 입력과 결과를 임시로 저장하는 범용 레지스터
MAR Memory Address Register 메모리 접근 시 사용할 주소를 저장하는 버퍼
MBR Memory Buffer Register 메모리에서 읽거나 쓸 데이터를 저장하는 버퍼

LOAD, ADD, STORE 명령에서 보는 실행 순서

LOAD AADD BSTORE C라는 명령어 흐름을 보면 각 단계에서 레지스터와 메모리가 어떻게 연결되는지 확인할 수 있다.

LOAD A

ACIRMemoryMARPCACIRMemoryMARPCFetch 단계Decode 단계Execute 단계Writeback 단계명령어 주소 (예: 0x1000)주소 0x1000 접근LOAD A 명령어 전달PC = 0x1001OpCode: LOAD, Operand: AA의 주소A 주소 접근A의 값 로드A의 값 저장 완료

ADD B

ALUACIRMemoryMARPCALUACIRMemoryMARPCFetch 단계Decode 단계Execute 단계Writeback 단계명령어 주소 (0x1001)주소 0x1001 접근ADD B 명령어 전달PC = 0x1002OpCode: ADD, Operand: BB의 주소B 주소 접근B의 값 전달A의 값 전달A + B 연산결과 (A + B) 저장

STORE C

ACIRMemoryMBRMARPCACIRMemoryMBRMARPCFetch 단계Decode 단계Execute 단계Writeback 단계(메모리에 이미 기록됨)명령어 주소 (0x1002)주소 0x1002 접근STORE C 명령어 전달PC = 0x1003OpCode: STORE, Operand: C결과 값 전달C의 주소C 주소 접근결과 값 저장

파이프라인에서 겹쳐 처리하는 명령어 단계

현대 CPU는 파이프라이닝(Pipelining)을 통해 서로 다른 명령어의 단계를 겹쳐 처리한다. 각 단계별로 여러 명령어를 동시에 다룰 수 있어 CPU 자원을 효율적으로 활용하고 처리량(Throughput)을 높일 수 있다.

000000000000000000000000000명령어1 FI 명령어1 FI 명령어1 DI 명령어1 DI 명령어2 FI 명령어1 EX 명령어1 EX 명령어2 DI 명령어3 FI 명령어1 WB 명령어1 WB 명령어2 EX 명령어3 DI 명령어4 FI 명령어2 FI 명령어2 WB 명령어3 EX 명령어4 DI 명령어2 DI 명령어3 WB 명령어4 EX 명령어2 EX 명령어4 WB 명령어2 WB 순차 방식파이프라인 방식파이프라인 방식 vs 순차 방식

다만 파이프라인은 데이터 의존성(Data Hazard), 제어 의존성(Control Hazard), 구조적 의존성(Structural Hazard)을 함께 다뤄야 한다.

기본 실행 흐름을 확장하는 CPU 최적화

슈퍼스칼라(Superscalar)는 한 클럭 사이클에 여러 명령어를 동시에 처리하는 방식이다.

Fetch UnitDecode Unit 1Decode Unit 2Execute Unit 1Execute Unit 2Writeback 1Writeback 2

비순차 실행(Out-of-Order Execution)은 명령어 사이에 의존성이 없을 때 실행 순서를 바꿔 성능을 높인다. 분기 예측(Branch Prediction)은 조건 분기 명령어의 결과를 미리 예측해 파이프라인 중단을 최소화한다.

명령어 사이클은 CPU가 프로그램을 실행하는 기본 메커니즘이다. Fetch → Decode → Execute → Writeback의 반복을 이해하면, PC·IR·AC·MAR·MBR이 프로그램 실행 과정에서 맡는 역할과 현대 CPU의 최적화 기법이 놓인 기반을 함께 파악할 수 있다.

컴퓨터구조CPU명령어 사이클레지스터파이프라이닝