다양한 CPU 레지스터들

CPU 는 크게 ALU, CU, Register 들로 구성되어 있다.

Arithmetic Logic Unit 은 이진수 연산을 전문적으로 하는 장치이고, Control Unit 은 데이터 입출력이나 명령어를 제어하는 장치이다.

Register 에는 다양한 종류가 있어서, Register Set 이라 불리기도 하는데, 각각은 특정한 목적이 있어서 cpu 가 작업을 하기 위해 필요한 것들을 담아 사용하는 공간이라고 볼 수 있다.

레지스터들은 cpu 내부에 존재하는 버스(BSB)로 연결되어 있어서, 메모리처럼 위치에 의해 어드레싱 되는 것이 아니라 직접 연결되어 있어서 연산장치가 바로 접근할 수 있다.


Registers

우리의 LMC는 메일박스에서 데이터를 가져와서 계산기에서 연산을 하는 일련의 과정 속에서 다양한 레지스터들을 활용한다.

cpu가 기억해야 할 사항마다 각각의 역할을 수행하는 레지스터들이 필요한 것이다.

  • PC는 Program Counter로, 수행하려는 명령이 있는 메모리의 주소를 담는다. 즉 LMC가 갖고있는 핸드카운터와 같다.

  • IR은 Instruction Register로, 현재 수행중인 명령을 담고 있다. IR 은 다른 레지스터와는 다르게 명령어를 해석하는 회로가 같이 구현되어 있는 특별한 레지스터이다.

  • MAR은 Memory Address Register로, 접근하려는 메모리의 주소를 담는다. PC는 다음 명령어가 어디있는지를 나타내는 것인데, MAR 은 메모리에서 명령어나 데이터를 가져오기 위한 주소를 임시로 담아놓는 레지스터라는 것이 차이점이다.

  • MBR은 Memory Buffer Register로, MDR(Data)라고 부르기도 한다. MAR의 값을 쫓아가 메모리에서 읽어온 값을 읽거나 쓸 때 버퍼로 사용하는 레지스터이다.

  • PSR은 Program Status Register로, 연산 결과의 각종 상태를 나타내는 여러 flag(비트)로 구성돼있다. 연산이 발생할 경우 갱신된다.


Memory Read / Write

먼저 REGa <- REGb 와 같은 표현은, 레지스터 b 에 있는 값을 레지스터 a 로 옮긴다는 뜻이다.

명령어 1번인 Load나 2번인 Store 같은 경우 메모리의 값을 읽어 계산기로 불러오거나, 계산기의 값을 메모리에 쓰는 등 Memory Read 나 Write 를 발생시킨다.

이 과정에서 여러 레지스터들이 어떻게 쓰이는지 알아보자.

우선 LMC가 다음 명령어를 실행하기 위해서는 PC 가 가리키고 있는 메일박스의 주소에 가서, 그 위치에 존재하는 데이터를 가져오는 fetch 과정에 Read 가 발생한다.

MAR <- PC
Memory Read
IR <- MBR

LMC는 MAR에 있는 주소값을 보고 찾아가기 때문에, 먼저 PC의 값을 MAR에 옮겨놓은 뒤 Read 를 발생시킨다.

Read 신호가 발생할 경우에는 MAR에 들어있는 주소값이 address decoder 를 거쳐 메모리 셀의 값이 MDR 로 전달된다.

따라서 MBR에는 PC가 가리키던 주소에 담긴 명령어가 Read 를 통해 들어오게 되고, 이를 IR 에 옮겨 명령어를 해석하게 한다.

Load

실행시킬 명령어가 1XX 와 같이 메모리의 값을 계산기로 Load 하는 명령어일 경우는 똑같이 메모리 Read 가 발생한다.

MAR <- IR[addr]
Memory Read
ALU <- MBR

IR 에서 명령어를 해석한 결과 명령어 코드가 1이라면 뒤의 두자리를 주소로써 인식했을 것이다.

해당 주소를 MAR 로 옮겨놓은 뒤 Read 신호를 발생시키면, MAR 에 있는 해당 주소를 찾아가 그 값을 MBR 에 전달한다.

최종적으로 MBR 에 들어있던 값을 계산기(ALU)에 올려놓으면 Load 가 완료된다.

명령어가 수행된 이후에는 반드시 PC <- PC + 1과 같이 PC 값을 증가시켜준다.

Store

명령어가 2XX처럼 계산기의 값을 메모리의 특정 위치에 저장하는 Store 일 때는 Memory Write 이 발생한다.

MAR <- IR[addr]
MBR <- ALU
Memory Write

마찬가지로 IR 에서 해석한 주소값을 MAR 에 옮겨놓는다. (Write 신호가 발생할 경우에는 MBR의 값이 MAR이 가리키는 메모리 셀에 전달된다.)

MBR의 값을 Write 하기 때문에, 계산기에 있던 값을 MBR 로 전달한 뒤, Write 신호를 발생시키면 MAR에 담긴 주소에 MBR의 값을 쓰는 것이다.