[06-a] CPU-첫걸음; 인출(Fetch) - 명령어를 메모리에서 가져오기
메모리에서 명령어를 가져오는 과정을 인출(Fetch)이라 한다.
인출 과정이 어떻게 이루어지는지 자세히 살펴보자.
메모리의 내용을 읽기 위해서는 그 내용이 저장된 메모리의 주소를 알아야 하고,
그 주소를 메모리에 보내주면 메모리에서 그 주소의 내용을 읽는다.
메모리의 주소는 제어장치에서 계산하며 제어장치 안에 있는
MAR(메모리 주소 레지스터, Memory Address Register)이라는 기억장치에 넣고,
필요한 시점에 메모리로 전송한다.
레지스터(register)란 원래 등록기라는 뜻인데,
CPU 안에 있는 임시 기억장치를 말한다.
레지스터는 메모리의 기억소자 보다 수 백배이상 빠른 고속의 기억장치이다.

메모리의 내용을 읽기 위하여 주소를 MAR에서 메모리로 전달한다.
MAR은 메모리의 주소를 저장하기 위한 임시 기억장치이고,
메모리의 주소를 지정해 주는 장치는 아니다.
메모리의 주소를 지정(또는 계산)하는 장치는 PC(Program Counter, 프로그램 카운터)이다.
즉, PC는 다음 명령어가 저장된 메모리의 주소를 담고 있는 레지스터이다.
PC는 다음 실행 할 명령어의 주소를 갖고 있다.
하나의 프로그램은 여러 개의 명령어로 되어 있고,
이들 명령어는 메모리에 순서대로 차례로 (연속적으로) 채워 들어간다.
이때, 각 명령어는 하나의 주소 공간을 가진다.
예를 들어, 어느 프로그램의 시작 주소가 808번지이고
그림과 같이 명령어와 데이터가 메모리에 들어왔다고 하자.
(시작주소는 시스템에서 결정한다)
(실제의 메모리에는 모두 0과 1로 이루어진 바이너리로 표현되어 있지만
편의상 십진수와 영문자로 표현한다.)
<메모리에 저장된 프로그램과 데이터의 예>
프로그램의 시작주소가 808번지이므로
①PC에 “808”이 들어간다.
그 다음 동작으로
②PC의 내용이 MAR에 보내진다.
이때, 다음 명령어는 메모리의 몇 번지에 저장되어 있을까?
순서대로 저장되어 있으므로 809번지가 될 것이다.
이와 같이 다음 명령어가 저장된 주소는 일정하게 증가(이 경우, 1씩 증가)한다.
<메모리의 내용을 읽기 위해 PC에서 주소를 MAR로 넘겨준다>
이제 메모리에서 내용을 가져오는 경우를 생각해 보자.
메모리에서 읽어 온 내용을 저장해 두는 임시 기억공간이 필요하다.
(임시 기억공간이 필요한 이유는 무엇일까?
만약, MBR이 없다면, 메모리의 내용이 목적지에 즉시 전달될 것인데,
아직 목적지가 내용을 받아들일 준비가 안된 상태에 있을 수 있다.
그런 경우 오류가 생길 수 있다. 이러한 이유로 MBR과 같은 완충장치를 둔다.
MAR을 사용하는 것도 같은 이유이다)
이러한 목적의 레지스터를 MBR(Memory Buffer Register, 메모리 버퍼 레지스터)이라 한다.
MBR은 ALU에 있다.
<메모리의 내용을 MBR에 저장>
인출 사이클은 메모리로 부터 명령어를 CPU의 IR까지 가져온다.
명령어의 해석을 위해 명령어를 저장하는 레지스터를
IR(Instruction Register, 명령어 레지스터)이라 한다.
<명령어를 IR에 저장하기>
지금까지의 경로를 따라가면,
PC → MAR → 메모리 → MBR → IR이다.
이렇게 하여 메모리에 저장된 하나의 명령어가 IR에 저장된다.
이 과정을 인출(Fetch)이라한다.
마치 작업을 하기 위해 창고(메모리)에서 물건(명령어)을 가져와서
작업대(IR)에 올려 놓는 과정과 유사하다.
<Fetch의 예>
【연습문제1】
(1) CPU 안에 있는 고속의 기억장치를 무엇이라 하는가?
(2) 메모리에서 어떤 내용을 읽기 위해서는 그 내용이 들어있는 메모리의 주소를
메모리에 전송해야 하는데, 메모리의 주소를 임시 저장하는 레지스터를 무엇이라 하는가?
(3) MAR(메모리 주소 레지스터)은 어디에 위치하는가?
【연습문제2】
(1) 다음 실행할 명령어의 주소를 갖고 있는 레지스터는 무엇인가?
(2) PC에 있는 주소를 MAR을 통하여 메모리에 전달하는 이유는 무엇일까?
(3) 메모리에서 CPU로 가져 온 내용이 데이터인지 명령어인지를 분간하는 주체는 무엇인가?
(4) 메모리에서 가져 온 내용을 CPU가 처리하기 전에, 임시로 저장하는 레지스터의 명칭은 무엇인가?
(5) 메모리에서 CPU로 가져 온 내용이 데이터라면 그 내용을 CPU의 어디에서 처리하는가?
(6) 메모리에서 CPU로 가져 온 내용이 명령어라면 그 내용을 CPU의 어디에서 처리하는가?
(7) 메모리에서 CPU로 가져 온 내용이 명령어라면 그 내용이 최종적으로 도달하는 레지스터는
무엇인가?
(8) Fetch의 과정에 있는 레지스터를 순서대로 열거하시오.
