A=3
B=4
C=A+B
위명령어를 처리할 때 CPU의 일하는 방법 및 순서를 정리합니다.
첫번째 해야햐는 단계인 프로그램 카운터(pc) 레지스터에 프로그램의 첫번째 명령어(instruction)가 있는 주소를 넣는다. 프로그램 카운터는 항상 cpu가 실행시켜야할 다음번 명령어의 주소를 가르키게 되어있다.
프로그램 카운터에 100이라는 주소가 들어간다. cpu에게 시작점을 넣어준것이다. 시작 주소를 넣어서 바로 연산하면 되는게 아니라 메모리 주소 레지스터에 100이라는 주소가 들어간다.
그다음 메모리 데이터 레지스터에 메모리 주소 레지스터에 있는 주소에 있는 주소에 접근을해서 LOAD 10을 가져와서 그 명령어가 들어간다.
메모리 데이터 레지스터가 가져온 데이터가 명령어기 때문에 명령어 레지스터로 옮겨간다.
그이후 프로그램 카운터가 하나 올라간다. 프로그램 카운터는 항상 다음번에 읽어와야하는 인스트럭션이 존재하는 메모리 주소를 가지고 있어야하기 때문에 인스트럭션이 실행이 되기 전에 다음번 읽어와햐하는 메모리 주소를 갖는다.
명령어 레지스터에 있는 instruction이 제어장치로 들어간다. 제어 장치가 해당 instruction이 어떤 행동을 하라는건지 해독을 하는데 이 과정을 decode라고 한다.
제어장치는 메모리 주소 10에 있는 데이터를 가져오라고 해독을한다.
메모리 주소 레지스터에 10이라는 주소가 들어간다.
메모리 데이터 레지스터에는 10번지 주소에있는 3이라는 데이터가 들어간다.
이전에는 명령어이기 때문에 명령어 레지스터에 할당 되었지만 지금은 명령어 자체가 값을 가져오는 것 이기 때문에 3을 어큐뮬레이터에 넣어준다.
LOAD10이라는 명령어(instruction)가 끝났기 때문에 프로그램 카운터에 이미 들어와있는 101주소가 메모리 주소 레지스터에 들어간다.
메모리 데이터 레지스터가 101주소에 있는 명령어를 가져온다.
명령어이기 때문에 101이 명령어 레지스터에 들어가고 프로그램 카운터는 다음 주소를 가르킨다(102)
101은 제어장치로 넘어간다. 제어장치는 ADD11이라는 명령어를 해독한다.
메모리 주소 11에있는 데이터를 더하라는 명령어를 받았고 이 데이터를 더하기 위한 값이 있어야 하기 때문에 앞에서 읽어온 3을 어큐뮬레이터에서 산술논리장치로 넘긴다.
메모리 주소11의 데이터를 읽어와야 하기 때문에 메모리 주소 레지스터에 11이 들어간다.
그이후 메모리 데이터 레지스터에 주소가 11인 데이터 4가 할당된다.
4가 어큐뮬레이터로 들어간다.
4가 다시 산술논리 장치에 들어가 3+4가 실행되어 7이되고 7이 어큐뮬레이터에 들어간다.
프로그램 카운터가 이미 다음 수행인 102를 가르키고 있고 메모리 주소 레지스터에 102가 할당된다.
메모리 주소 레지스터가 가르키는 102메모리 주소에 데이터인 STORE12가 메모리 데이터 레지스터에 들어간다
SOTRE12는 명령어(instruction)이기 때문에 명령어 레지스터로 들어간다.
프로그램 카운터가 다음으로 넘어 가는데 아무것도 없기 때문에 종료가 될 예정이다.
제어장치는 STORE12라는 명령어를 해독해 12에 지금 계산한 결과를 넣으라고 해독한다.
메모리주소 12가 메모리 주소 레지스터에 들어간다.
이번에는 메모리로부터 CPU로 값을 가져오는게 아니라 계산된결과가 있는 CPU 어큐뮬레이터에 있는 값을 메모리에 저장을 해야 하기 때문에 어큐뮬 레이터에있는 데이터 값 7이 메모리 데이터 레지스터에 들어간다.
제어장치가 저장하라는 신호를 보내고 7이 메모리주소 12에 저장이 된다.
혼자 공부한 내용을 토대로 정리한 글입니다. 잘못된 점에대해 지적해주시면 감사하겠습니다.