오늘 끝나면
CPU: fetch-decode-execute
- ✓CPU: fetch-decode-execute의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 CPU:이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
프로그램 카운터, 명령어, 제어장치 — 메모리에서 명령을 꺼내 해석하고 실행하는 반복 루프 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
14 · Fetch-Decode-Execute
간단한 CPU
ALU(계산) + 레지스터(기억) + 제어. 셋을 합침. 드디어 ‘명령 실행하는 기계’ 됨.
CPU = 꺼내-해석-실행 반복
CPU가 하는 일은 한 문장으로 끝남. 메모리에서 명령을 꺼내 해석하고 실행함. 그걸 끝없이 반복함.
명령은 사람이 미리 메모리에 쭉 적어둠.
CPU는 그걸 한 줄씩 꺼내 읽고 시키는 대로 함.
한 줄 처리하면 다음 줄로 넘어감 / 또 꺼내고 · 해석하고 · 실행함.
이 반복 자체가 ‘기계가 계산한다’는 말의 정체임.
fetch · decode · execute 사이클
한 박자를 세 단계로 쪼개면 fetch · decode · execute임.
fetch는 꺼내는 것 / 다음 명령을 메모리에서 가져옴.
decode는 해석하는 것 / 이 명령이 더하라는 건지 옮기라는 건지 알아냄.
execute는 실행하는 것 / 시키는 대로 ALU·레지스터를 움직임.
세 단계가 끝나면 다시 fetch로 돌아옴.
그래서 사이클(cycle)임 / 멈추기 전까지 같은 원을 계속 돎.
한 명령 = 세 단계 한 바퀴
PC · 레지스터 · 명령어
반복을 돌리려면 ‘지금 몇 번째 줄인지’ 기억하는 게 필요함. 그게 PC임.
PC(프로그램 카운터)는 다음 명령의 주소를 가리킴 / 한 줄 끝나면 한 칸 올라감.
레지스터는 계산 중인 값을 잠깐 담는 칸임.
제어장치가 decode 결과를 보고 누가 움직일지 지휘함.
명령어는 ‘무엇을 · 어디에’를 적은 한 줄임 / 예: R1에 R0을 더해라.
PC · 레지스터 · 제어 · ALU가 한 박자마다 같이 일함.
| PC | 다음 명령 주소를 가리킴 | → 0x04 |
| 제어장치 | decode 결과로 부품을 지휘 | ADD |
| 레지스터 | 계산 중인 값을 잠깐 담음 | R0·R1 |
| ALU | 실제로 더하고 뺌 | + − |
PC가 줄 번호를 잡아주니 순서대로 돌 수 있음
직접 스텝 실행해보기
계산하는 ALU는 더하고 빼는 것. 기억하는 레지스터는 값을 잠깐 담는 것. 다음에 뭐 할지 가리키는 PC(프로그램 카운터) 붙임. 이 셋 합친 게 CPU임.
오른쪽은 진짜 도는 토이 CPU임. 명령어 한 줄 실행하면 PC가 한 칸 움직임. 레지스터 R0·R1 값이 바뀜.▶ 실행 눌러봄.
이 프로그램은 5+4+3+2+1을 루프로 더함. R1에 15 만듦. 가져오고(Fetch) · 해석하고(Decode) · 실행함(Execute). 컴퓨터 일하는 방식이 전부 여기 있음.
LOAD R0, 5LOAD R1, 0ADD R1, R0DEC R0JNZ R0, 2HALTR0 ← 5 — 카운터를 5로 세팅.
모든 프로그램이 이 루프 위에서
게임이든 브라우저든 AI든, 결국 이 단순한 루프 위에서 돎.
화려한 프로그램도 컴파일하면 명령어 줄로 풀어짐.
CPU는 그 줄을 fetch · decode · execute로 한 줄씩 처리할 뿐임.
다른 점은 명령 줄 수와 속도뿐임 / 초당 수십억 박자를 돌려서 복잡해 보이는 것임.
이 단순 루프가 모든 계산의 뿌리임.
Q. PC(프로그램 카운터)가 하는 일은? (값을 더한다 · 다음 명령 주소를 가리킨다 · 화면에 출력한다 · 전원을 켠다)
정답은 다음 명령 주소를 가리킨다임.PC는 ‘지금 몇 번째 줄을 실행할 차례인지’ 기억하는 칸임.
한 명령이 끝나면 PC가 한 칸 올라가 다음 줄을 가리킴.
그래서 CPU가 명령을 순서대로 fetch할 수 있음.
다른 건 명령 줄 수와 속도뿐 — 루프는 하나임