본문 바로가기
컴퓨터구조 & 운영체제

20250103 컴퓨터구조 + 운영체제 7일차

by Kimjoy 2025. 1. 3.

오늘은 CPU의 구성요소 중 레지스터에 대해 알아보겠다.

프로그램 속의 명령어와 데이터는 실행 전후로 레지스터에 저장되고,
레지스터 속 값을 관찰하면 프로그램을 실행할 때 CPU 내에서 무슨 일이 벌어지고 있는지, 어떤 명령어가 어떻게 수행되는지 알 수 있다.

대표적인 레지스터에는 8가지가 있다.

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

프로그램 카운터(명령어 포인터)

메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장한다.

명령어 레지스터

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

메모리 주소 레지스터

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

메모리 버퍼 레지스터(메모리 데이터 레지스터)

메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터로,
CPU가 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터를 거치게 된다.

메모리에 저장된 프로그램을 실행하는 과정에서 프로그램카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터에 어떤 값이 담기는지 알아보겠다.

CPU로 실행할 프로그램이 1000번지부터 1500번지까지 저장되어 있다고 가정한다.
메모리에서 가져올 명령어가 1000번지에 있기 때문에, 처음 프로그램을 시작하기 위해 프로그램 카운터에는 1000이 저장된다.

1000번지를 읽어 들이기 위해서는 주소 버스로 1000번지를 내보내야 하는데,
이를 위해 메모리 주소 레지스터에는 1000이 저장되고, 메모리 주소 레지스터값이 주소버스를 통해 메모리로 보내진다.
그리고 제어장치에서는 메모리 읽기 제어신호가 제어버스를 통해 메모리로 보내진다.

메모리 1000번지에 저장된 값은 데이터 버스를 통해 메모리 버퍼 레지스터로 전달되고, 프로그램 카운터는 증가되어 다음 명령어를 읽어 들일 준비를 한다.

메모리 버퍼 레지스터에 저장된 값은 명령어 레지스터로 이동하고,
제어장치는 명령어 레지스터의 명령어를 해석하고 제어신호를 발생시킨다.
1000번지 명령어 처리가 끝나면 CPU는 다음 명령어를 읽어들이고, 이 과정이 반복되면서 CPU는 프로그램을 차레대로 실행해 나간다.

범용 레지스터

다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터로,
데이터와 주소를 모두 저장할 수 있다.

플래그 레지스터

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

스택 포인터

스택 주소 지정 방식이라는 주소 지정 방식에 사용된다.
스택 주소 지정 방식은 스택과 스택 포인터를 이용한 주소 지정 방식으로, 스택은 가장 최근에 저장한 값부터 꺼낼 수 있다.(first in last out)
스택 포인터란 스택의 꼭대기를 가리키는 레지스터로, 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터이다.
메모리 안에 스택처럼 사용할 영역이 정해져 있는데 이 영역을 스택 영역이라고 하고, 다른 주소 공간과는 다르게 스택처럼 사용하기로 암묵적으로 약속된 공간이다.

베이스 레지스터

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

변위 주소 지정 방식은 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식 등으로 나뉜다.
상대 주소 지정 방식은 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는 방식이다.

상대 주소 지정 방식은 프로그래밍 언어의 if문과 유사하게 모든 코드를 실행하는 것이 아닌, 분기하여 특정 주소의 코드를 실행할 때 사용된다.

베이스 레지스터 주소 지정 방식은 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식이다.
베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는 주소에 접근할 것인지를 연산하여 유효 주소를 얻어내는 방식이다.