Search

레지스터

class
운영체제
상태
완료
날짜
목차

레지스터

레지스터는 CPU 내부에 있는 하드웨어 내부에 위치하는 아주 작고 빠른 메모리 공간 입니다.
이들은 데이터를 일시적으로 저장하며, CPU가 처리하는 명령어의 중간 결과나 현재 진행 중인 작업에 필요한 데이터를 보관하는 데 사용됩니다.
레지스터는 데이터 처리의 속도를 향상시키기 위해 필수적인 역할을 합니다.

레지스터의 종류와 역할

레지스터의 종류와 기능은 운영 체제와 CPU 아키텍처에 따라 사용 방법이나 이름이 달라질 수 있습니다.
따라서, 레지스터의 종류와 기능을 완벽히 이해할 필요는 없습니다. 이 부분은 운영체제의 발전과 변화에 따라 바뀔 수 있기 때문입니다.
그러나, 게임 제작을 위해서는 기본적인 패턴과 방법을 알아야 하듯이, 레지스터의 기본적인 기능에 대해 알고 있어야 합니다.

1. 범용 레지스터

데이터 레지스터 : 데이터를 임시 저장하거나, 계산 결과를 저장하는 데 사용됩니다.
주소 레지스터 : 메모리 주소를 저장하는 데 사용되며, 메모리 접근 명령에서 기준 주소로 사용됩니다. 예를 들어, 베이스 레지스터, 인덱스 레지스터 등이 있습니다.
베이스 레지스터
베이스 레지스터는 주로 참조 지점이나 데이터의 시작 주소를 저장하는 데 사용됩니다. 스택 프레임 내에서 로컬 변수와 매개변수에 접근할 때 기준점으로 사용되는 것이 일반적입니다. 예를 들어, 함수 내에서의 데이터 접근이나, 동적 메모리 할당 영역에 대한 참조를 저장하는 데 활용됩니다.
사용 예시 함수 호출 시, 베이스 포인터는 현재 함수의 스택 프레임 시작 주소를 가리킵니다. 이를 통해, 함수 내부에서 로컬 변수와 매개변수의 주소를 쉽게 계산할 수 있습니다. 예를 들어, BP 레지스터를 사용하여 BP+4, BP+8 등의 방식으로 특정 로컬 변수나 매개변수에 접근할 수 있습니다.
인덱스 레지스터
인덱스 레지스터는 주로 배열이나 리스트와 같은 연속된 데이터 구조 내에서 특정 요소에 접근할 때 사용됩니다. 인덱스 레지스터의 값을 변화시키며 데이터 구조를 순회하거나, 특정 패턴에 따라 메모리 주소를 계산하는 데 사용됩니다.
사용 예시 배열에 있는 요소에 접근할 때, 인덱스 레지스터를 사용하여 배열의 시작 주소로부터 특정 요소까지의 오프셋을 계산합니다. 예를 들어, 배열의 시작 주소가 베이스 레지스터에 저장되어 있고, 각 배열 요소가 4바이트를 차지한다고 가정할 때, BX + (SI * 4) 계산을 통해 배열의 i번째 요소에 접근할 수 있습니다. 인덱스 레지스터의 값을 증가시키며 배열을 순회할 수 있습니다.

2. 프로그램 카운터 또는 명령어 포인터

CPU가 다음에 실행할 명령어의 메모리 주소를 가리키는 레지스터입니다. 명령어가 실행될 때마다 이 레지스터의 값은 자동으로 업데이트됩니다.

3. 스택 포인터

프로그램의 실행 동안 마지막으로 접근한 스택의 주소를 가리키는 레지스터입니다. 함수 호출, 로컬 변수의 저장 등에 사용됩니다.
스택 포인터에 대해서는 추후 TCB 설명 시에 자세히 다룰 예정입니다. 현재로서는 함수를 실행할 때 스택 포인터가 사용된다는 것만 알고 계시면 충분합니다. 스택 포인터에 대해 미리 공부하고 싶으시다면, 왜 함수가 스택 메모리에서 실행되는 것이 좋은지, 그리고 함수의 실행과 반환에 대한 이해를 통해 공부하시면 도움이 될 것입니다.

4. 세그먼트 레지스터

메모리 세그먼트를 가리키는 데 사용되며 코드, 데이터, BSS, 스택, 힙 등 프로세스가 현재 사용하고 있는 메모리 사용 영역을 가리키는 용도입니다.

5. 상태 레지스터 / 플래그 레지스터

ㄴU의 상태를 나타내는 플래그들을 포함합니다. 이러한 플래그들은 산술 연산의 결과(오버플로, 제로, 캐리, 사인 등)를 나타내고, 조건부 분기 명령어의 결정에 사용됩니다.