오늘 끝나면
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할 수 있다.
다른 건 명령 줄 수와 속도뿐, 루프는 하나다