CPU Work
CPU는 메모리에 저장된 명령어를 순차적으로 읽어들이고(Fetch), 해석하고(Decode), 실행(Execute)하는 과정을 반복하며 프로그램을 수행한다.
명령어 처리 주기(Instruction Cycle)
섹션 제목: “명령어 처리 주기(Instruction Cycle)”CPU가 하나의 명령어를 처리하는 과정은 다음과 같이 반복된다.
- 인출(Fetch): 메모리상의 주소에서 명령어를 읽어 CPU 레지스터로 가져오는 단계
- 해독(Decode): 가져온 명령어가 어떤 동작을 요구하는지 제어 장치가 해석하는 단계
- 실행(Execute): 해석된 명령어에 따라 산술 논리 장치(ALU)가 연산하거나 데이터를 이동시키는 단계
- 저장(Store): 연산 결과를 레지스터나 메모리에 기록하는 단계
주요 레지스터
섹션 제목: “주요 레지스터”CPU 내부에서 데이터를 일시적으로 저장하는 초고속 메모리다.
| 레지스터 | 영문명 | 설명 |
|---|---|---|
| PC | Program Counter | 다음에 실행할 명령어의 메모리 주소를 저장 |
| IR | Instruction Register | 현재 실행 중인 명령어를 저장 |
| MAR | Memory Address Register | 읽거나 쓸 메모리의 주소를 저장 |
| MDR | Memory Data Register | 메모리에서 읽어온 데이터나 메모리에 쓸 데이터를 저장 (MBR이라고도 함) |
| AC | Accumulator | 연산 결과를 일시적으로 저장하는 누산기 |
Program Counter(PC)
섹션 제목: “Program Counter(PC)”CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터로 다음에 실행할 명령을 메모리에서 찾아 주소를 알려주는 역할을 한다.
- 프로그램 카운터에는 다음 실행할 명령어의 주소가 존재
- 해당 주소에서 명령어를 가져옴
- 프로그램 카운터를 증가시켜 그 다음 실행할 명령어 주소 대입
- 가져온 명령어 실행
CPU 실행 상세 과정
섹션 제목: “CPU 실행 상세 과정”제시된 시나리오(A=3, B=4, A+B 결과를 저장)를 바탕으로 명령어 단위별 레지스터 상태 변화를 정리하면 다음과 같다.
초기 상태
섹션 제목: “초기 상태”- 메모리 10번지:
3(A) - 메모리 11번지:
4(B) - 메모리 100번지:
LOAD 10 - 메모리 101번지:
ADD 11 - 메모리 102번지:
STORE 12 - PC: 100 (시작 지점)
1. LOAD 10 (메모리 10번지 값을 누산기로 적재)
섹션 제목: “1. LOAD 10 (메모리 10번지 값을 누산기로 적재)”| 구분 | PC | MAR | MDR | IR | AC | 설명 |
|---|---|---|---|---|---|---|
| 인출 | 100 | - | - | - | - | PC가 가리키는 100번지 명령어 인출 준비 |
| 인출 | 100 | 100 | LOAD 10 | - | - | MAR에 주소 전달, 메모리에서 명령어 읽어 MDR 저장 |
| 인출 | 100 | 100 | LOAD 10 | LOAD 10 | - | MDR 내용을 IR로 이동 |
| 인출 | 101 | 100 | LOAD 10 | LOAD 10 | - | 다음 명령 실행을 위해 PC 1 증가 |
| 실행 | 101 | 10 | LOAD 10 | LOAD 10 | - | 명령어 해독 결과, 10번지 데이터 필요. MAR에 10 저장 |
| 실행 | 101 | 10 | 3 | LOAD 10 | 3 | 메모리 10번지의 값(3)을 읽어 AC에 저장 |
2. ADD 11 (누산기 값과 메모리 11번지 값을 더함)
섹션 제목: “2. ADD 11 (누산기 값과 메모리 11번지 값을 더함)”| 구분 | PC | MAR | MDR | IR | AC | 설명 |
|---|---|---|---|---|---|---|
| 인출 | 101 | - | - | - | 3 | PC가 가리키는 101번지 명령어 인출 준비 |
| 인출 | 101 | 101 | ADD 11 | - | 3 | MAR을 통해 101번지 명령어 읽어 MDR 저장 |
| 인출 | 101 | 101 | ADD 11 | ADD 11 | 3 | MDR 내용을 IR로 이동 |
| 인출 | 102 | 101 | ADD 11 | ADD 11 | 3 | 다음 명령 실행을 위해 PC 1 증가 |
| 실행 | 102 | 11 | ADD 11 | ADD 11 | 3 | 명령어 해독. 피연산자 주소 11을 MAR에 저장 |
| 실행 | 102 | 11 | 4 | ADD 11 | 3 | 메모리 11번지의 값(4)을 읽어 MDR 저장 |
| 실행 | 102 | 11 | 4 | ADD 11 | 7 | ALU가 AC(3)와 MDR(4)을 더해 결과(7)를 AC에 저장 |
3. STORE 12 (누산기 값을 메모리 12번지에 저장)
섹션 제목: “3. STORE 12 (누산기 값을 메모리 12번지에 저장)”| 구분 | PC | MAR | MDR | IR | AC | 설명 |
|---|---|---|---|---|---|---|
| 인출 | 102 | - | - | - | 7 | PC가 가리키는 102번지 명령어 인출 준비 |
| 인출 | 102 | 102 | STORE 12 | - | 7 | MAR을 통해 102번지 명령어 읽어 MDR 저장 |
| 인출 | 102 | 102 | STORE 12 | STORE 12 | 7 | MDR 내용을 IR로 이동 |
| 인출 | 103 | 102 | STORE 12 | STORE 12 | 7 | 다음 명령 실행을 위해 PC 1 증가 |
| 실행 | 103 | 12 | STORE 12 | STORE 12 | 7 | 명령어 해독. 저장할 주소 12를 MAR에 저장 |
| 실행 | 103 | 12 | 7 | STORE 12 | 7 | 저장할 데이터(AC값 7)를 MDR로 이동 |
| 실행 | 103 | 12 | 7 | STORE 12 | 7 | MDR의 값을 메모리 12번지에 저장 (쓰기) |