Ruya Games

레지스터 본문

Computer Science/컴퓨터 구조

레지스터

SadEvil 2024. 6. 1. 17:40

레지스터는 CPU 안에서 자료를 보관할 수 있는 아주 빠른 저장공간입니다. CPU 안에는 역할에 따라 다양한 레지스터들이 존재합니다.

역할에 따라 나눠진 레지스터의 종류는 아래와 같습니다.

 

1. 프로그램 카운터(Program Counter, PC)

  - 메모리에서 가져올 명령어의 주소를 저장합니다. 주소를 저장하기 때문에 명령어 포인터(Instruction Pointer, IP)라고 부르는 CPU도 있습니다.

 

2. 메모리 주소 레지스터(Memory Address Register, MAR)

  - 메모리의 주소를 저장하는 레지스터입니다. CPU가 메모리의 특정 주소값을 읽기 위해 해당 주소값을 주소 버스로 보낼때 MAR을 통하게 됩니다.

 

3. 메모리 버퍼 레지스터(Memory Buffer Register, MBR)

  - 메모리와 주고받을 값을 저장하는 레지스터입니다. 메모리에 쓰고싶은 값이나, 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거칩니다. <CPU -> 주소 버스> 의 데이터 흐름에서는 MAR을 거쳐야 한다면 <CPU -> 데이터 버스> 의 데이터 흐름에서는 MBR을 거치게 됩니다.

 

4. 명령어 레지스터(Instruction Register, IR)

  - 메모리에서 읽어들인 명령어를 저장하는 레지스터입니다. CPU안의 제어장치는 IR속 명령어를 해석한 뒤 제어신호를 발생시킵니다.

 

개인적으로는 특정 값에 대한 저장/실행이라는 역할에 따라 위의 4개의 레지스터가 구분되어있다는 느낌이었습니다.

 

위 4개의 레지스터를 사용해서 CPU가 메모리상에 있는 프로그램을 실행하는 순서는 아래와 같습니다.

실행할 프로그램이 메모리상의 1000번부터 1500번까지 저장되어있다고 가정하고, 현재 PC에 1000이 저장되었다고 가정합니다.

  1. 메모리의 1000번지의 값을 읽기 위해서는 주소 버스를 통해 1000값을 내보내야 하고, 이때 MAR를 사용해야 합니다. MAR에 1000값을 저장합니다.
  2. 제어장치에서 메모리 읽기 신호를 제어 버스를 통해 메모리로 전송하고, MAR에서 읽고자하는 메모리 주소값인 1000을 주소 버스를 통해 메모리에 전송합니다.
  3. 메모리의 1000번지에 저장되있던 값은 데이터 버스를 통해 CPU의 MBR로 전달되고, 값을 정상적으로 받아왔으므로 PC에 저장된 주소값은 1증가하게 됩니다(1000 -> 1001).
  4. MBR에 저장되있던 값(메모리의 1000번지에서 가져온 값)은 IR로 이동합니다.
  5. 제어장치는 IR에 저장된 명령어를 해석한 뒤 제어신호를 발생시킵니다.

이 외에도 레지스터가 더 있습니다.

5. 범용 레지스터(General Purpose Register)

  - 사용처가 정해진 위의 4개의 레지스터들과는 달리, 다양한 상황에서 자유롭게 사용할 수 있는 레지스터입니다.

 

6. 플래그 레지스터(Flag Register)

  - ALU의 연산 결과에 따른 플래그를 플래그 레지스터에 저장합니다.

 

7. 스택 포인터(Stack Pointer)

  - 메모리 내부의 스택 영역에 마지막으로 저장된 값의 위치를 저장하는 레지스터입니다.

 

8. 베이스 레지스터(Base Register)

  - 변위 주소 지정방식중, 베이스 레지스터 주소 지정 방식에서 사용됩니다.

    - 변위 주소 지정방식은 오퍼랜드와 특정 레지스터에 저장된 값을 더하여 유효 주소를 얻어내는 주소 지정 방식입니다. 명령어의 형태는 연산코드와 오퍼랜드에, 레지스터를 특정할 수 있는 레지스터 필드가 추가된 형태입니다. 여기서 레지스터 필드에 PC를 넣게 되면 상대 주소 지정 방식(PC값 + 오퍼랜드), 베이스 레지스터를 넣게되면 베이스 레지스터 주소 지정 방식(베이스 레지스터 값 + 오퍼랜드)이 됩니다.

 

'Computer Science > 컴퓨터 구조' 카테고리의 다른 글

명령어의 구조  (0) 2024.05.29