레지스터
프로그램 속 명령어, 데이터는 실행 전후로 반드시 레지스터에 저장됩니다.
레지스터 속 값을 유심히 관찰하는 경우 프로그램 실행하는 경우 CPU 내에서 동작, 명령어 수행을 알 수 있습니다.
공간은 작지만 CPU와 직접 연결되어 있어 연산 속도가 메모리보다 실제 수십 배에서 수백 배까지 빠릅니다.
대표적인 레지스터
1.) 프로그램 카운터
2.) 명령어 레지스터
3.) 메모리 주소 레지스터
4.) 메모리 버퍼 레지스터
5.) 플래그 레지스터
6.) 범용 레지스터
7.) 스택 포인터
8.) 베이스 레지스터
1.) 프로그램 카운터
- 메모리에서 가져올 명령어의 주소, 메모리에서 읽어 들일 명령어의 주소입니다.
- 프로그램 카운터를 '명령어 카운터'라 부르는 CPU도 있습니다.
2.) 명령어 레지스터
- 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터입니다.
- 제어장치는 명령어 레지스터 속 명령어를 받고 이를 해석한 뒤 제어 신호를 내보냅니다.
3.) 메모리 주소 레지스터
- 메모리의 주소를 저장하는 레지스터로 CPU가 읽어 들이고자 하는 주소 값을 주소
버스로 보낼 때 메모리 주소 레지스터를 거칩니다.
4.) 메모리 버퍼 레지스터
- 메모리에 쓰고 싶은 값, 메모리로부터 전달받은 값을 메모리 버퍼 레지스터를 거칩니다.
- 데이터 버스로 주고받은 값은 메모리 버퍼 레지스터를 거칩니다.
- 메모리 버러 레지스터를 메모리 데이터 레지스터라고 부릅니다.
5.) 플래그 레지스터
- 연산 결과 또는 CPU상태에 대한 부가적인 정보를 저장하는 레지스터입니다.
6.) 범용 레지스터
- 다양하고 일반적인 상황에서 자유롭게 사용 가능한 레지스터입니다.
- 데이터, 주소를 모두 저장할 수 있고 현대 대다수 CPU는 범용 레지스터를 가지고 있습니다.
7.) 스택 포인터
- 스택 주소 지정 방식이라는 주소 지정 방식에 사용되고 프로그램 카운터, 베이스 레지스터는 변위 주소 지정
방식이라는 지정 방식에 사용됩니다.
- 스택 주소 지정 방식 : 스택, 스택 포인터를 이용한 주소 지정 방식입니다.
※ 스택 : 가장 최근에 저장하는 값을 꺼낼 수 있습니다.
※ 스택 영역 : 스택은 메모리에 존재하고 메모리 안에 스택처럼 사용할 영역입니다.
이 영역은 스택 영역 공간으로 다른 공간과 별도로 사용 가능하도록 암묵적으로 약속된 영역
- 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터로 스택에 마지막으로 저장한 값의 위치를 저장합니다.
즉 스택의 마지막 위치를 표시한다고 생각하면 됩니다.
8.) 베이스 레지스터
- 오퍼랜드, 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식입니다.
- 베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는 주소에 접근할 것인지를 연산하여
유효 주소를 얻어내는 방식입니다.
특정 레지스터를 이용한 주소 지정 방식
1.) 변위 주소 지정 방식
- 오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 방식입니다.
- 해당 방식은 오퍼랜드 들의 주소, 어떤 레지스터를 더하는지에 따라 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식 등으로 구분 가능합니다.
1-1.) 상대 주소 지정 방식 - 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식입니다.
간단 정리
- 프로그램 카운터 : 메모리에서 가져올 명령의 주소입니다.
- 명령어 레지스터 : 해석할 명령어를 지정 합니나.
- 메모리 주소 레지스터 : 메모리의 주소입니다.
- 메모리 버퍼 레지스터 : 메모리와 주고받을 데이터를 저장합니다.
- 범용 레지스터 : 데이터, 주소를 모두 저장합니다.
- 플래그 레지스터 : 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장합니다.
- 스택 포인터 : 스택 최상 단위 위치를 저장합니다.
- 베이스 레지스터 : 저장된 주소는 기준 주소로서의 역할을 합니다.