CPU 명령어 사이클을 구성하는 메이저 상태
CPU 메이저 상태의 Fetch, Execute, Indirect, Interrupt 흐름과 상태 레지스터, 상태별 마이크로 연산을 정리한다.
2026-08-14 · 최초 발행 2025-12-25
명령어 실행을 나누는 CPU의 상태 흐름
CPU 메이저 상태(Major State)는 명령어를 처리할 때 거치는 주요 단계를 Fetch, Execute, Indirect, Interrupt로 구분한 것이다. 메이저 스테이트 레지스터가 현재 상태를 나타내고, 제어 유닛은 그 상태에 맞는 마이크로 연산을 수행한다.
이 상태 전이는 명령어 사이클의 뼈대가 된다. 모든 명령어는 Fetch를 거치며, 주소 지정 방식과 인터럽트 요청 여부에 따라 이후 경로가 달라진다.
Fetch에서 시작하는 명령어 처리
Fetch 상태에서는 PC가 가리키는 메모리 주소에서 다음 명령어를 읽어 IR(Instruction Register)에 저장한다. 이어서 PC를 증가시켜 다음 명령어 주소를 준비한다. 명령어의 종류와 무관하게 Fetch는 항상 수행된다.
Execute 상태는 IR에 저장된 명령어를 해독하고 실제 연산을 처리하는 단계다. 오퍼랜드를 가져와 산술·논리·제어 연산을 수행하고 결과를 저장하며, 세부 동작은 명령어 종류에 따라 달라진다.
Indirect 상태는 간접 주소 지정 방식에서만 필요하다. IR의 주소 필드를 메모리 주소로 사용해 실제 오퍼랜드 주소를 읽고, 이를 주소 레지스터(AR)에 저장한 뒤 Execute 상태로 넘긴다.
Interrupt 상태는 외부 인터럽트 요청이 있을 때 진입한다. 현재 PC 값을 복귀 주소로 저장하고, PC를 인터럽트 벡터로 설정해 인터럽트 서비스 루틴으로 분기한다.
주소 지정과 인터럽트가 바꾸는 다음 상태
Fetch 이후에는 주소 지정 방식에 따라 Indirect 또는 Execute로 이동한다. Execute가 끝난 시점에는 인터럽트 요청 여부를 확인하며, 요청이 있으면 Interrupt를 거쳐 Fetch로 돌아간다.
| 현재 상태 | 조건 | 다음 상태 |
|---|---|---|
| Fetch | 간접 주소 지정 | Indirect |
| Fetch | 직접 주소 지정 | Execute |
| Indirect | 주소 해석 완료 | Execute |
| Execute | 인터럽트 요청 있음 | Interrupt |
| Execute | 인터럽트 요청 없음 | Fetch |
| Interrupt | 인터럽트 처리 완료 | Fetch |
직접 주소 지정에서 인터럽트가 없다면 상태는 다음처럼 반복된다.
Fetch → Execute → Fetch → Execute → ...
간접 주소 지정을 사용하면 Execute 전에 주소 해석 단계가 추가된다.
Fetch → Indirect → Execute → Fetch → ...
인터럽트가 발생한 경우에는 Execute 뒤에 Interrupt 상태가 삽입된다.
Fetch → Execute → Interrupt → Fetch → ...
현재 상태를 나타내는 메이저 스테이트 레지스터
메이저 스테이트 레지스터는 4비트로 구성되며, 각 상태에 하나의 비트를 할당하는 One-Hot 인코딩을 사용한다. 동시에 1이 되는 비트는 하나다.
- F (Fetch): 1000
- E (Execute): 0100
- I (Indirect): 0010
- R (Interrupt): 0001
제어 유닛은 상태 비트와 타이밍 신호의 논리곱을 이용해 조건부 마이크로 연산을 만든다. 예를 들어 F · T0: AR ← PC는 Fetch 상태의 첫 번째 타이밍에서만 실행된다.
상태별로 선택되는 마이크로 연산
Fetch 상태에서는 PC의 값을 주소 레지스터로 옮긴 뒤 명령어를 읽고 PC를 증가시킨다. 마지막 타이밍에서 간접 주소 지정 여부를 판단한다.
| 타이밍 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | AR ← PC | PC 값을 주소 레지스터에 |
| T1 | IR ← M[AR], PC ← PC + 1 | 명령어 읽기, PC 증가 |
| T2 | 상태 전이 결정 | 간접/직접 판단 |
Indirect 상태에서는 IR의 주소 필드를 바탕으로 실제 주소를 읽은 후 Execute 상태로 이동한다.
| 타이밍 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | AR ← IR(Address) | 주소 필드를 AR에 |
| T1 | AR ← M[AR] | 실제 주소 읽기 |
| T2 | Execute로 전이 | 실행 단계로 |
Execute 상태의 마이크로 연산은 명령어에 따라 달라진다. ADD에서는 AC ← AC + M[AR], JMP에서는 PC ← AR, STORE에서는 M[AR] ← AC가 수행된다.
Interrupt 상태에서는 복귀 주소를 저장하고 인터럽트 벡터를 설정한 뒤 Fetch로 전이해 ISR을 시작한다.
| 타이밍 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | M[0] ← PC, PC ← 0 | 복귀 주소 저장 |
| T1 | PC ← PC + 1 | 인터럽트 벡터 |
| T2 | Fetch로 전이 | ISR 시작 |
CPU 메이저 상태는 명령어 실행 과정을 제어 가능한 단계로 나누는 모델이다. Fetch와 Execute가 기본 경로를 이루고, 간접 주소 지정과 인터럽트 요청이 필요한 상태 전이를 추가한다.