김검정 2024. 6. 26. 09:21

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

레지스터

 

로우레벨 개발자들은 레지스터에 들은 데이터를 확인할 일이 많다. 

 

CPU 내부에는 다양한 레지스터들이 있고, 각기 다른 역할을 가진다. 레지스터의 종류는 CPU마다 다르며 공용으로 사용하는 레지스터도 있다.

 

반드시 알아야 할 레지스터에는 다음과 같은 것들이 있다.

  1. 프로그램 카운터 : 메모리에서 가져올 명령어의 주소 (메모리에서 읽어 들일 명령어의 주소)
  2. 명령어 레지스터 : 해설할 명령어 (방금 메모리에서 읽어 들인 명령어)
  3. 메모리 주소 레지스터 : 메모리의 주소 (CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터)
  4. 메모리 버퍼 레지스터 : 메모리와 주고받을 값 (데이터와 명령어) (CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터) 
  5. 플래그 레지스터 :  연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터
  6. 범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용 가능한 레지스터
  7. 스택 포인터 : 주소 지정에 사용
  8. 베이스 레지스터 :  주소 지정에 사용

 

 

위 그림처럼 CPU가 처리하고자 하는 프로그램이 1000번지 부터 ~ 1500번지까지 있다고 가정해보자 또 처음부터 프로그램을 실행한다고 가정했을때 프로그램 카운터에는 1000번지가 저장될 것이다.

 

프로그램 카운터에 저장

 

프로그램 카운터가 1000번지 프로그램을 실행하기 위해서는 메모리에 있는 1000번지 데이터를 가져와야 하는데 이때 메모리에 접근하기 위해서 메모리 주소 레지스터를 거치게 된다. (복사가 된다)

메모리 주소 레지스터

 

메모리 제어 신호를 통해 몇번지 메모리를 읽고 싶은지 메모리에게 쏴준다.

메모리 읽기

 

그렇게 되면 메모리는 1000번지에 저장된 값을 메모리 버퍼 레지스터로 데이터 버스를 통해 전달한다. 

전달한 이후 프로그램 카운터는 1이 증가한다. 다음으로 실행할 주소값을 셋팅한다.

 

메모리 -> 메모리 버퍼 레지스터

 

이렇게 가지고 온 1101 명령어를 제어장치가 해석하기 위해서 명령어 레지스터에 복사하게 된다. 

명령어 레지스터로 이동

 

위에서 강조된게 프로그램 카운터는 1 증가한다고 하였는데 이것이 프로그램이 순차적으로 실행할 수 있는 원리가 된다.

 

프로그램 카운티 1증가

 

하지만 항상 이렇게 순차적으로 프로그램이 실행되는 것은 아니다. 

  • 특정 메로리 주소로 실행 흐름을 이동하는 명령어 실행 시 ex) JUMP, CONDITIONAL, CALL, RET
  • 인터럽트 발생 시

위와 같은 경우에 순차적인 흐름이 끊기게 된다.

 

스택 포인터 레지스터에 대해 알아보자.

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

스택 포인터

 

위 그림과 같이 4번지까지 스택이 차있으면 스택 포인터에는 4번지 주소값이 저장된다. 

 

스택은 어디에 있을까??

 

스택은 메모리에 스택 영역이라는 곳에 존재한다.

스택 영역

 

다음은 베이스 레지스터에 대해 알아보자.

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

변위 주소 지정 방식에서 사용되는 특별한 레지스터이다.

변위 주소 지정 방식이란 오퍼랜드라는 값을 변위로 삼고 특정 레지스터에 있는 값을 더해서 유효 주소를 얻어내는 주소 지정 방식이다.

변위 주소 지정 방식

 

어떤 레지스터에 어떤 변위를 더할것인지 정해야 하기 때문에, 변위 주소 지정 방식을 사용하는 명령어는 다음과 같은 모양을 띄고 있다.

변위 주소 지정 방식 명령어

 

변위 주소 지정 방식에서 어떤 특정 레지스터의 값을 더할것이지에 따라 분류가 된다.

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

상대 주소 지정 방식

 

위 그림은 다음으로 읽을 메모리 주소에서 3번째 전의 명령어를 실행해라 라는 명령어를 실행하려면 위 그림과 같이 표현할 수 있다.

 

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

베이스 레지스터 주소 지정 방식

베이스 레지스터 주소 지정 방식의 경우 베이스 레지스터는 기준 주소역할을 한다. (=프로그램의 시작점) 그 기준으로 부터 오퍼랜드 필드 만큼 떨어져 있는 주소에 접근하고 싶을때 사용한다.