명령어 사이클
- CPU가 하나의 명령어를 처리하는 과정에는 어떤 정해진 흐름이 있고, CPU는 그 흐름을 반복하여 명령어들을 처리해나간다.
- 이렇게 하나의 명령어를 처리하는 정형화된 흐름을 명령어 사이클이라고 한다.
- 즉, 명령어를 꺼내와 실행하기 위한 연속적인 동작 과정.
CPU는 정해진 흐름에 따라 명령어를 처리해나가지만, 간혹 이 흐름이 끊어지는 상황이 발생하는데, 이를 인터럽트라고 한다.

프로세서는 초당 수백만번 아래의 사이클을 반복적으로 수행한다.
- Fetching
- CPU는 처음에 지시사항을 받는다. RAM(주기억장치)에서 CPU로 전달되는 이진 숫자들이다. CPU는 단일 지시사항을 받지 않고 메모리 내 여러 세트로 나누어지는데 이 때 프로그램 카운터(PC)가 다음 명령어의 주소를 보유하고 있어서 필요에 따라 순서대로 수행할 수 있다. 그리고 이 순서들을 IR(Instruction Register)에서 저장하고 CPU는 이에 따라 수행한다.
- Decoding
- CPU에 할 일들이 로드되면, 해당 명령어들의 의미를 파악해야하는데 이후 ALU(산수논리장치)의 도움으로 디코딩 과정이 시작되고 ALU는 논리적 및 산술적 연산을 수행하고 필요한 계산을 관리하여 컴퓨터의 여러 구성 요소를 관리한다. 메모리에서 지시사항을 읽고 해석하여 다음 단계를 위해 CPU의 다른 부분으로 전달될 일련의 신호 형태로 변환한다.
- Executing
- 디코딩된 명령어가 실행된다. 실행 단계 동안 명령어를 수행해야 한다. 이는 메모리에서 데이터를 로딩하거나, 메모리에 데이터를 저장하거나, 계산을 수행하는 등 많은 것을 포함할 수 있다.
- Store
- 사용자의 지시에 따라 출력 장치에 제공되거나 컴퓨터 시스템에 저장되거나 2차 저장 장치에 저장도니다.
명령이 순환하는 동안 CPU에 사용되는 회로는 다음과 같다.
- 프로그램 카운터(PC): 다음에 실행할 명령어에 대한 메모리 주소를 추적
- 메모리 주소 레지스터(MAR): 다음에 실행할 명령어의 메모리에 있는 주소를 보관
- 메모리 버퍼 레지스터(MBR): 메모리로부터 페치(fetch)되어 cpu가 처리할 준비가 된 데이터나 메모리에 저장되어 대기 중인 데이터를 보관하는 양방향 레지스터
- 명령어 레지스터(IR): 메모리로부터 fetch되는 (현재 실행할) 명령어를 일시적으로 보관하는 영역
- CU: 명령어 인출, 해독, 실행을 위한 제어신호를 타이밍에 맞춰 발생시킨다.
- ALU: 산술 및 논리 연산을 수행
명령어 기본 사이클
- 명령어 인출 (instruction fetch) 사이클
- 명령어 실행 (instruction execution) 사이클
- CPU가 명령어를 실행하는 단계 (decode, execution)
- 명령어 기본 사이클 = fetch cycle + execution cycle
명령어 인출 사이클 (fetch cycle)

t1 ~ t3은 순차적인 마이크로 연산을 나타낸다.
- 명령어가 저장된 주소 지정
- t1: MAR <- PC: PC에 저장된 명령어 주소를 MAR로 전송
- MAR번지 메모리 명령어를 MBR로 전송, PC가 다음번 명령어 주소를 가리키도록 준비
- t2: MBR <- M[MAR], PC <- PC + n
- 인출한 명령어를 IR로 전송
명령어 실행 사이클 (execution cycle)
- 실행 사이클 동안에는 CPU가 명령어 코드를 해독(decode)하고, 그 결과에 따라 필요한 연산들을 수행한다.
- CPU가 수행하는 연산에는 데이터 이동, 데이터 처리, 데이터 저장, 프로그램 제어 가 있다.
- 명령어는 연산 코드(Operation Code)와 오퍼랜드(operand)로 구성된다.
- 실행 사이클에서 수행되는 마이크로 연산들은 명령어의 연산 코드에 의해 결정된다.
- 명령어 실행에 필요한 데이터가 저장도니 주소는 오퍼랜드에 의해 결정된다.

IR로 가져온 명령어가 지시하는 내용에 따라 수행되는 마이크로 연산이 달라진다.
- 명령어 해독(decode) : 인출된 명령어를 해독한다.
- opcode 해독: 인출한 명령어의 opcode를 (디코더 회로에서) 해독하여 동작을 구현하는 회로로 신호를 보냄
- operand 해독: 유효주소를 얻는 과정으로, addressing mode에 따라 operand에 저장된 값을 통해 유효 주소를 얻는다. (간접 사이클이라고도 한다)
- 명령어 실행(execution) : 명령어 실행에 필요한 CPU 내외부 제어신호를 발생시킴
- deocder 출력 라인에 선정된 microcode들을 실행하여 명령어를 동작하게 한다.

1) 데이터 이동: Load addr 명령어
기억장치에 저장되어 있는 데이터를 CPU 내부 누산기(AC)에 저장하는 명령어
1. 명령어 레지스터(IR)에 있는 오퍼랜드를 메모리 주소 레지스터(MAR)에 저장
- MAR가 지정하는 기억장치 주소로부터 데이터를 읽어서 메모리 버퍼 레지스터(MBR)에 저장
- MBR에 저장된 데이터를 누산기(AC)에 저장
2) 데이터 저장: STA addr 명령어
누산기(AC)에 저장된 데이터를 기억장치에 저장하는 명령어
1. 명령어 레지스터(IR)에 있는 오퍼랜드를 메모리 주소 레지스터(MAR)에 저장
- 누산기(AC)에 저장된 데이터를 메모리 버퍼 레지스터(MBR)에 저장
- MBR에 저장된 데이터를 MAR가 지정하는 기억장치 주소에 저장
3) 데이터 처리: ADD addr 명령어
기억장치에 저장된 데이터를 누산기(AC)에 저장된 값에 더하여 그 결괄르 다시 누산기에 저장하는 명령어

- 명령어 레지스터(IR)에 있는 오퍼랜드를 메모리 주소 레지스터(MAR)에 저장
- 저장할 데이터를 MAR가 지정하는 기억장치 주소로부터 읽어서 메모리버퍼 레지스터(MBR)에 저장
- MBR에 저장된 데이터를 산술논리연산장치(ALU)에서 연산하여 그 결과값을 누산기(AC)에 저장
4) 프로그램 제어: JUMB addr 명령어
오퍼랜드가 가리키는 주소의 명령어로 실행 순서를 변경하는 분기(branch) 명령어
- 명령어 레지스터(IR)에 저장된 오퍼랜드를 PC에 저장하여 명령어 순서를 변경
Reference