1. CPU의 역할과 명령어 실행 과정
CPU(중앙처리장치)는 기억장치에 저장된 명령어를 실행하여 프로그램을 수행하는 핵심 장치
- 명령어 인출 (Instruction Fetch)
- 기억장치에서 명령어를 가져옴.
- 명령어 해독 (Instruction Decode)
- 명령어를 분석하여 수행할 동작 결정.
- 데이터 인출 (Data Fetch)
- 명령어 실행을 위해 필요한 데이터를 기억장치 또는 I/O 장치에서 읽어옴.
- 데이터 처리 (Data Process)
- 연산 수행 (산술·논리 연산 등).
- 데이터 저장 (Data Store)
- 연산 결과를 저장.
위 과정 중 1~2번 과정은 모든 명령어에서 수행되지만, 3~5번 과정은 명령어에 따라 선택적으로 수행
2. CPU의 기본 구조
CPU는 다음과 같은 주요 구성 요소로 이루어져 있음
- 산술논리연산장치(ALU)
- 덧셈, 뺄셈, 논리 연산(AND, OR, NOT 등)을 수행하는 하드웨어 모듈.
- 레지스터(Register)
- CPU 내부의 고속 기억장치로 데이터를 빠르게 저장하고 처리.
- 제어 유니트(Control Unit)
- 명령어를 해독하고 실행을 위한 제어 신호 생성.
- CPU 내부 버스
- CPU 내부에서 데이터를 전달하는 통로.
2.1 주요 레지스터
CPU 내부에는 다양한 레지스터가 있다.
| 레지스터 | 설명 |
| 프로그램 카운터 (PC) | 다음 실행할 명령어의 주소 저장 |
| 명령어 레지스터 (IR) | 현재 실행 중인 명령어 저장 |
| 누산기 (AC) | 연산 결과를 일시적으로 저장 |
| 메모리 주소 레지스터 (MAR) | 메모리에서 읽거나 쓸 주소 저장 |
| 메모리 버퍼 레지스터 (MBR) | 메모리에서 읽어온 데이터나 저장할 데이터를 임시 보관 |
3. 명령어 실행 과정
CPU는 클록 신호에 따라 명령어를 실행하며, 이를 **명령어 사이클(Instruction Cycle)**이라고 함.
명령어 사이클은 **인출 사이클(Fetch Cycle)**과 **실행 사이클(Execution Cycle)**로 나뉨
3.1 인출 사이클 (Fetch Cycle)
CPU는 프로그램 카운터(PC)가 가리키는 기억장치의 위치에서 명령어를 인출.

| CPU 클록 주기 | 동작 | 설명 |
| t0 | MAR ← PC | PC의 값을 내부 버스를 통해 MAR로 보냄 |
| t1 | MBR ← M[MAR], PC ← PC + 1 | 메모리에서 MAR이 가리키는 명령어를 MBR로 이동, PC 값 증가 |
| t2 | IR ← MBR | MBR에 저장된 명령어를 명령어 레지스터(IR)로 이동 |
➡ 총 3개의 CPU 클록 주기 동안 실행됨.
3.2 실행 사이클 (Execution Cycle)
실행 사이클에서는 CPU가 인출된 명령어를 해독하고 연산을 수행한다. 실행 사이클에서 CPU가 수행하는 연산들은 다음과 같이 분류할 수 있음
1) 데이터 이동 연산 (LOAD addr)
설명: 기억장치에 저장된 데이터를 AC로 로드하는 연산
마이크로 연산 표현:
| CPU 클록 주기 | 동작 | 설명 |
| t0 | MAR ← IR(addr) | 명령어의 오퍼랜드(주소)를 MAR로 보냄 |
| t1 | MBR ← M[MAR] | MAR이 가리키는 메모리 위치에서 데이터를 MBR로 이동 |
| t2 | AC ← MBR | MBR에 저장된 데이터를 AC에 적재 |
2) 데이터 처리 연산 (ADD addr)
설명: AC 레지스터의 값과 메모리에서 가져온 값을 더하는 연산

마이크로 연산 표현:
| CPU 클록 주기 | 동작 | 설명 |
| t0 | MAR ← IR(addr) | 명령어의 오퍼랜드(주소)를 MAR로 보냄 |
| t1 | MBR ← M[MAR] | MAR이 가리키는 메모리 위치에서 데이터를 MBR로 이동 |
| t2 | AC ← AC + MBR | MBR의 값과 AC 값을 더하여 결과를 AC에 저장 |
3) 데이터 저장 연산 (STA addr)
설명: AC 레지스터의 데이터를 메모리에 저장하는 연산
마이크로 연산 표현:
| CPU 클록 주기 | 동작 | 설명 |
| t0 | MAR ← IR(addr) | 데이터를 저장할 메모리 주소를 MAR로 보냄 |
| t1 | MBR ← AC | AC의 데이터를 MBR로 이동 |
| t2 | M[MAR] ← MBR | MBR의 값을 메모리에 저장 |
4) 프로그램 제어 연산 (JUMP addr)
설명: 특정 주소로 분기(Branch)하는 연산
마이크로 연산 표현:
| CPU 클록 주기 | 동작 | 설명 |
| t0 | PC ← IR(addr) | 명령어의 오퍼랜드(주소)를 PC로 저장 |
➡ 다른 위치의 명령어로 실행 순서를 바꾸는 분기(branch) 명령어 -> JUMP 라고도 함!
4. 명령어 실행 예제
- 편의상 기계 코드를 10진수로 표현
- LOAD 1, STA 2, ADD 5, JUMP 8로 가정
- 즉, 기계 코드의 첫 숫자는 연산 코드이고 그 다음 세 숫자들은 오퍼랜드로서 기억장치 주소를 나타냄
1) 예시 1
| 주소 | 명령어 | 기계 코드 |
| 100 | LOAD 250 | 1 250 |
| 101 | ADD 251 | 5 251 |
| 102 | STA 251 | 2 251 |
| 103 | JUMP 170 | 8 170 |
- 실행 단계별 설명
| 단계 | 설명 |
| 1단계 | 첫 번째 명령어(LOAD 250) 인출. PC가 100번지를 가리키고 있으며, 명령어가 IR로 이동. |
| 2단계 | 명령어 해독 후, 250번지의 데이터를 AC로 로드. PC 값 증가. |
| 3단계 | 두 번째 명령어(ADD 251) 인출. IR에 저장. |
| 4단계 | AC의 값과 251번지의 값을 더하여 연산 수행. 결과를 AC에 저장. PC 값 증가. |
| 5단계 | 세 번째 명령어(STA 251) 인출. IR에 저장. |
| 6단계 | AC의 내용을 251번지에 저장. PC 값 증가. |
| 7단계 | 네 번째 명령어(JUMP 170) 인출. IR에 저장. |
| 8단계 | PC에 170번지를 저장하여 프로그램 흐름을 변경. |
2) 예시 2

[단계 1] LOAD 명령어 인출
- **PC(프로그램 카운터)**가 현재 0100을 가리키고 있다.
- 해당 주소(100번지)의 내용을 읽어 명령어 레지스터(IR)에 저장한다.
- **100번지에는 1250**이라는 명령어가 있으며, 이를 IR에 저장한 후 PC 값을 0101로 증가한다.
➡ 결과:
- IR ← 1250 (LOAD 250)
- PC ← 0101
[단계 2] LOAD 명령어 실행
- 1250 명령어를 해독한다.
- LOAD 250이므로, 250번지의 데이터를 AC 레지스터로 이동하는 명령어이다.
- 250번지에서 값(0004)을 읽어와 AC에 저장한다.
➡ 결과:
- AC ← 0004
- LOAD 명령어 실행 완료
- PC는 그대로 0101
[단계 3] ADD 명령어 인출
- PC가 101번지를 가리킨다.
- 101번지에서 명령어(5251)를 인출하여 IR에 저장한다.
- PC 값을 증가시켜 0102로 변경한다.
➡ 결과:
- IR ← 5251 (ADD 251)
- PC ← 0102
[단계 4] ADD 명령어 실행
- 5251 명령어를 해독한다.
- ADD 251이므로, AC와 251번지의 데이터를 더하는 연산이다.
- 251번지에서 데이터를 가져온다.
- 251번지의 값: 0003
- ALU를 사용하여 연산 수행:
- 0004 + 0003 = 0007
- 연산 결과를 다시 AC에 저장한다.
➡ 결과:
- AC ← 0007
- PC는 그대로 0102
[단계 5] STA 명령어 인출
- PC가 102번지를 가리킨다.
- 102번지에서 명령어(2251)를 인출하여 IR에 저장한다.
- PC 값을 증가시켜 0103으로 변경한다.
➡ 결과:
- IR ← 2251 (STA 251)
- PC ← 0103
[단계 6] STA 명령어 실행
- 2251 명령어를 해독한다.
- STA 251이므로, AC 값을 251번지에 저장하는 명령어이다.
- 현재 AC 값 0007을 251번지에 저장한다.
➡ 결과:
- M[251] ← 0007
- STA 명령어 실행 완료
- PC는 그대로 0103
[단계 7] JUMP 명령어 인출
- PC가 103번지를 가리킨다.
- 103번지에서 명령어(8170)를 인출하여 IR에 저장한다.
➡ 결과:
- IR ← 8170 (JUMP 170)
- PC는 아직 0103
[단계 8] JUMP 명령어 실행
- 8170 명령어를 해독한다.
- JUMP 170이므로, PC 값을 170으로 변경하는 분기 명령어이다.
- PC를 170으로 변경하여 프로그램 실행 흐름을 변경한다.
➡ 결과:
- PC ← 0170
- 다음 명령어는 170번지에서 실행됨
'ARCHITECTURE' 카테고리의 다른 글
| [아키텍처] 제어 유니트(Control Unit) 란? (0) | 2025.04.09 |
|---|---|
| [아키텍처] 명령어 세트(Instruction Set)과 인터럽트 사이클(Interrupt Cycle) (0) | 2025.04.09 |
| [아키텍처] 명령어 형식과 주소지정 방식 (0) | 2025.04.02 |
| [아키텍처] 정수의 산술 연산과 부동소수점 수 (0) | 2025.03.26 |
| [아키텍처] 컴퓨터 산술과 논리 연산 (1) | 2025.03.19 |