메이저 상태 사이클로 읽는 CPU 명령어 처리 흐름
메이저 상태 사이클의 Fetch, Indirect, Execute, Interrupt 전이와 마이크로 연산, F·R 플립플롭 상태를 정리한다.
2026-08-14 · 최초 발행 2025-12-25
명령어 처리는 Fetch에서 출발해 다시 Fetch로 돌아온다
메이저 상태 사이클(Major State Cycle)은 CPU가 명령어를 처리하며 거치는 상태 변화 주기다. 기계 사이클(Machine Cycle)이라는 이름으로도 부른다. Fetch, Indirect, Execute, Interrupt로 구성되며, 각 상태에서는 정해진 마이크로 연산 시퀀스가 수행된다.
모든 명령어는 Fetch Cycle에서 시작한다. 이후 주소 지정 방식과 인터럽트 요청 여부에 따라 다른 사이클로 전이한다. F(Fetch), R(Indirect) 플립플롭은 이 상태를 관리한다.
Fetch Cycle에서 명령어와 주소 지정 방식을 읽는다
Fetch Cycle은 주기억장치의 명령어를 CPU의 IR(Instruction Register)로 가져와 해석하는 구간이다. 어떤 명령어이든 이 단계부터 시작한다.
| 단계 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← PC | PC의 명령어 주소를 MAR에 전송 |
| T1 | MBR ← M[MAR], PC ← PC+1 | 메모리에서 명령어 읽기, PC 증가 |
| T2 | IR ← MBR[OP], I ← MBR[I] | OP 코드를 IR에, I 비트를 I 플립플롭에 |
| T3 | 상태 전이 | I 값에 따라 Execute 또는 Indirect로 |
I 비트가 0이면 직접 주소 지정이므로 Execute Cycle로 이동하며 F ← 1, R ← 0이 된다. I 비트가 1이면 간접 주소 지정이므로 Indirect Cycle로 전이하고 F ← 0, R ← 1이 된다.
간접 주소는 실제 데이터 위치를 한 번 더 해석한다
Indirect Cycle은 명령어의 주소 필드(Operand 부)를 통해 실제 데이터 위치를 찾는 과정이다. 간접 주소 지정 방식일 때만 수행한다.
| 단계 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← MBR[AD] | MBR의 주소 필드를 MAR에 전송 |
| T1 | MBR ← M[MAR] | 메모리에서 실제 주소(또는 데이터) 읽기 |
| T2 | 상태 전이 | 명령어 유형에 따라 전이 |
1 Cycle 명령은 Fetch Cycle로 돌아가며 F ← 0, R ← 0이 된다. 실행이 필요한 명령은 Execute Cycle로 넘어가고 F ← 1, R ← 0이 된다.
Execute Cycle은 명령어별 마이크로 연산을 수행한다
Execute Cycle에서는 Fetch에서 해석한 명령을 실제로 실행한다. 수행하는 마이크로 연산은 명령어 유형에 따라 달라진다.
- AND: AC ← AC ∧ M[AD]
- ADD: AC ← AC + M[AD]
- LDA: AC ← M[AD]
- STA: M[AD] ← AC
- BUN: PC ← MBR[AD] (무조건 분기)
- BSA: 복귀 주소 저장 후 서브루틴 호출
- ISZ: M[AD] ← M[AD] + 1, if zero then PC ← PC + 1
실행이 정상적으로 끝나면 F ← 0, R ← 0으로 바뀌며 Fetch Cycle로 복귀한다. 플래그 레지스터 변화로 인터럽트가 발생하면 F ← 1, R ← 1 상태에서 Interrupt Cycle로 이동한다.
인터럽트 요청은 현재 위치를 저장한 뒤 ISR로 넘긴다
Interrupt Cycle은 외부 인터럽트가 발생했을 때 현재 실행을 멈추고 인터럽트 서비스 루틴으로 분기하는 단계다.
| 단계 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MBR[AD] ← PC, PC ← 0 | 복귀 주소(PC) 저장, PC를 0으로 |
| T1 | MAR ← PC, PC ← PC+1 | PC 값을 MAR에, PC 증가 |
| T2 | M[MAR] ← MBR, IEN ← 0 | MBR을 메모리에 저장, 인터럽트 비활성화 |
| T3 | Fetch Cycle로 전이 | F ← 0, R ← 0 |
IEN(Interrupt Enable) 플립플롭이 1이면 인터럽트를 허용한다. IEN이 0이면 인터럽트를 금지하며, 이는 인터럽트 처리 중 중첩을 막기 위한 상태다.
F와 R의 조합이 현재 처리 단계를 나타낸다
| 사이클 | F | R | 의미 |
|---|---|---|---|
| Fetch | 0 | 0 | 명령어 인출 |
| Indirect | 0 | 1 | 간접 주소 해석 |
| Execute | 1 | 0 | 명령어 실행 |
| Interrupt | 1 | 1 | 인터럽트 처리 |
직접 주소 지정이고 인터럽트가 없을 때의 흐름은 다음과 같다.
Fetch → Execute → Fetch → Execute → ...
간접 주소 지정 명령을 처리한 뒤 인터럽트가 발생하면 다음 순서가 된다.
Fetch → Indirect → Execute → Interrupt → Fetch → ...