CPU 의 내부 구성 (2) - 레지스터

.·2023년 12월 23일

computer-architecture

목록 보기
3/10

레지스터는 CPU 내부의 작은 임시 저장 장치
프로그램 속 명령어 & 데이터는 실행 전후로 레지스터에 저장

CPU 내부에는 다양한 레지스터들이 있고, 각기 다른 역할을 가진다.


레지스터의 종류

(반드시 알아야할 레지스터 종류)

컴퓨터에서 레지스터는 중앙 처리 장치(CPU) 내에 있는 작은 저장 공간으로, 가장 빠른 데이터 접근 속도를 제공합니다. 이러한 레지스터들은 다양한 용도로 사용되며, 각각의 레지스터는 특정한 역할을 가지고 있습니다. 몇 가지 주요 레지스터의 종류와 그 역할을 살펴보겠습니다:

1. 프로그램 카운터 (PC) 레지스터:

  • 프로그램 카운터는 다음에 실행될 명령어의 주소를 저장합니다.
  • CPU가 명령어를 실행할 때마다, PC는 자동으로 증가하여 다음 명령어의 위치를 가리킵니다.
  • PC는 프로그램의 실행 순서를 제어하는 데 중요한 역할을 합니다.

2. 명령 레지스터 (Instruction Register, IR) 레지스터:

  • 명령 레지스터는 현재 실행 중인 명령어를 저장합니다.
  • CPU는 IR에 저장된 명령어를 해석하고 실행합니다.

3. 메모리 주소 레지스터 (MAR)

  • 역할: 메모리 주소 레지스터는 메모리의 특정 주소를 저장합니다. CPU가 메모리에 데이터를 읽거나 쓸 때, MAR은 해당 데이터의 위치를 가리키는 주소를 저장합니다.
  • 사용: MAR은 CPU가 메모리로부터 데이터를 읽거나 메모리에 데이터를 쓸 때 사용되는 주소 정보를 보관합니다.
  • 중요성: MAR은 메모리 연산에서 데이터의 정확한 위치를 지정하는 데 중요한 역할을 합니다. 즉, 어떤 데이터가 어디에 있는지를 나타내는 주소 정보를 제공합니다.

4. 메모리 버퍼 레지스터 (MBR)

  • 역할: 메모리 버퍼 레지스터는 메모리와 CPU 사이에서 데이터 전송을 중개하는 역할을 합니다. MBR은 메모리에서 읽은 데이터를 임시로 저장하거나, 메모리에 쓸 데이터를 임시로 보관합니다.
  • 사용: CPU가 메모리로부터 데이터를 읽을 때, 해당 데이터는 먼저 MBR에 저장됩니다. 반대로, CPU가 메모리에 데이터를 쓸 때도, 데이터는 먼저 MBR을 거쳐 메모리로 전송됩니다.
  • 중요성: MBR은 메모리와 CPU 사이의 데이터 교환에서 중요한 역할을 하며, 메모리 읽기/쓰기 연산의 중간 단계에 있습니다.

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

  • 상태 레지스터는 CPU의 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장

6. 범용 레지스터 (General-Purpose Registers)

범용 레지스터는 이름 그래도 다양하고 일반적인 상황에서 자유롭게 사용할 수 잇는 레지스터입니다. 일반적으로 MAR은 메모리 주소값만 MBR는 데이터버스로 주고 받을 값만 저장하지만 범용레지스터는 데이터와 주소를 모두 저장할 수 있습니다.

7. 스택 포인터

스택 포인터는 주로 스택(stack)이라 불리는 메모리 영역을 관리하는 데 사용됩니다. 스택은 함수 호출, 로컬 변수 저장, 프로그램 실행 중 발생하는 다양한 임시 데이터를 처리하는 데 사용되는 LIFO(Last In, First Out) 구조의 메모리 영역입니다.

스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식
스팩 포인터 : 스택의 꼭대기를 가르키는 레지스터

8. 베이스 레지스터 (Base Registers):

  • 이 레지스터들은 메모리 관리에 사용됩니다.
  • 베이스 레지스터는 메모리 세그먼트의 시작 주소를 저장하고, 한계 레지스터는 세그먼트의 크기를 저장합니다.

프로그램 실행 과정

(https://velog.io/@kong2520/명령어의-구조#오퍼랜드-operand-주소-필드 를 보고 오면 좋다)


① PC에 저장된 주소를 MAR로 보낸다.
② MAR에 저장된 주소에 있는 기억장치의 명령어를 MBR로 읽어 오고, PC를 증가시킨다. 명령어의 실행을 위해 읽어 온 명령을 IR에 저장한다.
③ 명령어의 연산코드는 명령어 해독기로 보내고 오퍼랜드는 주소처리기로 보낸다.
④ 주소처리기는 MAR을 통해 기억장치에 접근하여 명령어 수행에 필요한 오퍼랜드의 주소 또는 다음 명령어의 주소를 계산한다.
⑤ 제어신호 발생기에서는 위의 ①~④ 과정에서 필요한 제어신호와 연산코드를 해독하여 명령 수행을 위한 제어신호를 발생시킨다. 이때 명령어가 기억장치의 주소를 참조하는 명령어라면 주소처리기를 동작시켜 다음에 수행될 명령어의 주소를 계산한다.
⑥ 현재 IR에 있는 명령어의 수행이 끝나면 증가된 PC의 내용은 다음에 수행할 명령어의 주소를 지정하거나 분기가 필요한 경우 해당 명령어의 주소를 지정하는데 이는 다시 ①부터의 과정을 반복하며 실행된다.

위 실행과정을 더 쉽게 설명

CPU 가 실행하고자 하는 프로그램이 메모리에 1000번지부터 1500번지까지 저장되어 있다.
이제 프로그램이 1000번지 , 즉 처음부터 실행한다고 가정하면

  • PC 에는 1000 번지 (실행될 명령어의 메모리주소) 가 저장된다.
  • MAR(메모리 주소 레지스터)에 PC(프로그램카운터)에 저장된 메모리 주소를 복사한다.
  • 제어장치가 메모리 읽기 제어신호를 내보내 MAR(메모리 주소 레지스터)가 저장하고 있는 주소에 담긴 명령어을 읽어오라는 신호를 보낸다.
  • 그렇게 되면 메모리는 1000번지에 저장된 "1101" 명령어를 데이터 버스를 통해 MBR(메모리 버퍼 레지스터) 에 명령어를 전달해주게 된다.
  • 메모리 버퍼 레지스터에 메모리 주소 레지스터가 담고 있는 주소에 대한 명령어가 전달되면 PC(프로그램 카운터) 다음 실행할 메모리 주소로 업데이트 된다. 즉 프로그램 카운터가 +1 증가 되었다 (중요)
  • 제어장치가 명령어를 해석하기 위해 MBR(데이터 버퍼 레지스터)에 있던 명령어를 IR(명령어 레지스터)로 전달한다.

프로그램 카운터

방금 예시에서 보았듯이 메모리 버퍼 레지스터에 메모리 주소 레지스터가 담고 있는 주소에 대한 명령어가 전달되면 PC(프로그램 카운터) 다음 실행할 메모리 주소로 (+1) 업데이트되었는데, 이 방법이 프로그램이 순차적으로 실행하는 원리가 된다.

물론 PC(프로그램 카운터)가 마냥 1 씩 증가하는 건 아니다.
프로그램의 순차적인 실행 흐름이 끊기는 경우도 있는데

  • 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시
    - (e.g. JUMP, CONDITINAL JUMP, CALL, RET)
  • 인터럽트 발생시
  • ETC ...

주소 지정 방식

변위 주소 지정 방식

Base Register "변위 주소 지정 방식" 이라는 특별한 주소 지정 방식에서 사용된다.

변위 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 특정 레지스터(프로그램 카운터, 
베이스 레지스터)의 값을 더하여 유효 주소 얻기

오퍼랜드 필드 값(변위)와 레지스터 값을 더하면 유효주소를 얻어낼 수 있음.
그리고 연산코드로 그 유효 주소에 연산을 수행함

변위 주소 지정 방식 - 상대 주소 지정 방식

변위 주소 방식을 비교하기 위해 상대 주소 지정 방식도 배워보자

상대 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 프로그램 카운터(PC)의 값을 더하여 유효 주소 얻기


그림 설명 :
PC(프로그램 카운터)는 다음으로 읽어드릴 명령어 주소를 가지고 담고 있다.
여기서 3은 변위라고 볼수 있다.
즉 PC + 3 을 하면 다음으로 실행할 명령어 + 3번지, 즉 유효주소를 변위 + PC 로 얻을 수 있다.

변위 주소 지정 방식 - 베이스 레지스터 주소 지정방식

베이스 레지스터 주소 지정 방식 : 오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더하여 유효 주소 얻기


그림 설명 :
기준주소는 프로그램의 시작점이라고 생각하면 된다.


Reference

profile
.

0개의 댓글