[CS] 레지스터

정은아·2023년 12월 15일
post-thumbnail

레지스터의 종류와 역할을 알아보고,
각 레지스터를 통해 명령어가 처리되는 과정을 알아보자.

반드시 알아야 할 레지스터!

  1. 프로그램 카운터
  2. 명령어 레지스터
  3. 메모리 주소 레지스터
  4. 메모리 버퍼 레지스터
  5. 플래그 레지스터
  6. 범용 레지스터
  7. 스택 포인터
  8. 베이스 레지스터

프로그램 카운터

  • 프로그램 카운터는 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장한다.
  • 프로그램 카운터를 명령어 포인터라고 부르는 CPU도 있다.

명령어 레지스터

  • 명령어 레지스터는 해석할 명령어, 즉 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터이다.
  • 제어장치는 명령어 레지스터 속 명령어를 받아들이고 이를 해석한 뒤, 제어신호를 내보낸다.

메모리 주소 레지스터

  • 메모리 주소 레지스터는 메모리의 주소를 저장하는 레지스터이다.
  • CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 주소 레지스터를 거치게 된다.

메모리 버퍼 레지스터

  • 메모리 버퍼 레지스터는 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터이다.
  • 메모리에 쓰고 싶은 값이나 메모리부터 전달받은 값은 메모리 버퍼 레지스터를 거친다.
  • CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고받을 값은 메모리 버퍼 레지스터를 거친다.
  • 메모리 버퍼 레지스터는 메모리 데이터 레지스터(MDR)라고 부른다.

범용 레지스터

  • 범용 레지스터는 이름 그대로 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터이다.
  • 범용 레지스터는 데이터와 주소를 모두 저장할 수 있다.
  • 일반적으로 CPU 안에는 여러 개의 범용 레지스터들이 있고, 현대 대다수 CPU는 모두 범용 레지스터를 가지고 있다.

플래그 레지스터

  • ALU 연산 결과에 따른 플래그를 플래그 레지스터에 저장한다.
  • 플래그 레지스터는 연산 결과 또는 CPU 상태에 부가적인 정보를 저장하는 레지스터이다.

특정 레지스터를 이용한 주소 지정 방식

1. 스택 주소 지정 방식

  • 스택 포인터, 베이스 레지스터는 주소 지정에 사용될 수 있는 특별한 레지스터이다.
  • 스택포인터는 스택 주소 지정 방식이라는 주소 지정방식에 사용되고, 프로그램 카운터와 베이스 레지스터는 변위 주소 지정 방식이라는 주소 지정방식에 사용된다.
    • 스택 주소 지정 방식은 스택과 스택 포인터를 이용한 주소 지정 방식이다.
    • 스택 포인터란 스택의 꼭대기를 가리키는 레지스터이다.
    • 그렇다면 스택은 어디에 있는걸까? 스택은 메모리 안에 있다. 메모리 안에 스택처럼 사용할 영역이 정해져 있는데, 이를 스택영역이라고 한다.

2. 변위 주소 지정 방식

  • 변위 주소 지정 방식이란 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식이다.

  • 변위 주소 지정 방식은 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라 상대 주소 지정방식, 베이스 레지스터 주소 지정 방식 등으로 나뉜다.

    2-1. 상대 주소 지정 방식

    • 상대 주소 지정 방식은 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식이다.
    • 상대 주소 지정 방식은 프로그래밍 언어의 if문과 유사하게 모든 코드를 실행하는 것이 아닌, 분기하여 특정 주소의 코드를 실행할 때 사용된다.

    2-2. 베이스 레지스터 주소 지정 방식

    • 베이스 레지스터 주소 지정 방식은 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식이다.
    • 베이스 레지스터는 '기준 주소', 오퍼랜드는 '기준 주소로부터 떨어진 거리'로서의 역할을 한다. 기준 주소로부터 얼마나 떨어져 있는 주소에 접근할 것인지를 연산하여 유효 주소를 얻어 내는 방식이다.
profile
꾸준함의 가치를 믿는 개발자

0개의 댓글