메이저 상태 사이클로 읽는 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) 플립플롭은 이 상태를 관리한다.

YesF←1NoR←1YesF←1,R←1NoF←0,R←0FetchCycleI=0(직접주소)?ExecuteCycleIndirectCycle인터럽트요청?InterruptCycle

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이 된다.

I=0(직접 주소)I=1(간접 주소)Fetch Cycle 완료I bit 검사Execute CycleF←1, R←0Indirect CycleF←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이 된다.

"MAR/MBR""IR""메모리""PC""MAR/MBR""IR""메모리""PC"I=1 (간접 주소)이제 500번지에서 데이터 읽음"Fetch: 주소 100""명령어: LOAD [200]""Indirect: 주소 200""실제 주소: 500"

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로 이동한다.

인터럽트 발생정상 완료Execute Cycle 완료플래그레지스터 변화?Interrupt CycleF←1, R←1Fetch CycleF←0, R←0

인터럽트 요청은 현재 위치를 저장한 뒤 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
"메모리""ISR""인터럽트""주 프로그램""메모리""ISR""인터럽트""주 프로그램""인터럽트 발생""PC를 메모리[0]에 저장""PC ← 1 (ISR 시작)""인터럽트 처리""복귀 주소 읽기""원래 위치로 복귀"

IEN(Interrupt Enable) 플립플롭이 1이면 인터럽트를 허용한다. IEN이 0이면 인터럽트를 금지하며, 이는 인터럽트 처리 중 중첩을 막기 위한 상태다.

F와 R의 조합이 현재 처리 단계를 나타낸다

사이클 F R 의미
Fetch 0 0 명령어 인출
Indirect 0 1 간접 주소 해석
Execute 1 0 명령어 실행
Interrupt 1 1 인터럽트 처리
"I=1 (간접)""I=0 (직접)""주소 해석 완료""1사이클 명령""플래그 변화""정상 완료""인터럽트 처리 완료"FetchIndirectExecuteInterrupt

직접 주소 지정이고 인터럽트가 없을 때의 흐름은 다음과 같다.

Fetch → Execute → Fetch → Execute → ...

간접 주소 지정 명령을 처리한 뒤 인터럽트가 발생하면 다음 순서가 된다.

Fetch → Indirect → Execute → Interrupt → Fetch → ...
컴퓨터구조CPU기계 사이클마이크로 연산인터럽트