CPU의 내부 구성 - 레지스터
레지스터
- CPU 내부의 작은 임시저장장치이다.
- 프로그램속 명령어 & 데이터는 실행 전후로 레지스터에 저장된다.
- 가장 기초적인 단계에서부터 실행되는 순서, 원리등을 레지스터를 통해 관찰할 수 있다.
* 프로그래머 입장에서는 관찰할 일이 많은 레지스터가 ALU나 제어장치보다 중요하다고 볼 수 있다.
* 로우레벨 단계 개발자는 관찰할 일이 정말 많다고 한다.
대표적인 레지스터의 종류
1. 프로그램 카운터
2. 명령어 레지스터
3. 메모리 주소 레지스터
4. 메모리 버퍼 레지스터
5. 플래그 레지스터
6. 범용 레지스터
7. 스택 포인터
8. 베이스 레지스터
각각의 레지스터 설명
1. 프로그램 카운터
- 메모리에서 가져올 명령어의 주소를 저장하고 있다.(메모리에서 읽어드릴 명령어의 주소)
- 명령어가 실행되면 카운터 수가 하나씩 증가하여 다음 주소를 가르키게 된다.
- 인터럽트 발생시 와 같은 순차적인 흐름이 끊기는 경우에는 카운터 값이 1씩 증가하는것은 아니다.
(Jump, conditional jump, call 등)
2. 명령어 레지스터
- 해석할 명령어 ( 방금 읽어들인 명령어)
- 제어장치가 해석한다.
3. 메모리 주소 레지스터
- 메모리의 주소를 저장한다.
- 즉, CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터이다.
4. 메모리 버퍼 레지스터
- 메모리와 주고받을 값(데이터와 명령어)
- CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터이다.
5. 플래그 레지스터
- 연산 결과 또는 CPU 상태에 대한 부가적인 정보
- 현재 CPU가 어떤 연산을 하고 있었는지 직간접적으로 알 수 있다.
6. 범용 레지스터
- 다양하고 일반적인 상황에서 자유롭게 사용이 가능한 레지스터이다.
- 여러개가 있다.
7. 스택 포인터
- 특별한 주소 지정에서 사용된다.
- 스택 주소지정방식 : 스택과 스택 포인터를 이용한 주소 지정 방식이다.
- * 스택포인터 : 스택의 꼭대기를 가리키는 레지스터이다.(스택이 어디까지 차 있는지에 대해 표시된다.)
8. 베이스 레지스터
- 특별한 주소 지정방식에 사용된다.
- 변위 주소 지정방식 : 오퍼랜드 필드의 값(변위)와 특정 레지스터의 값을 더하여 유효주소를 얻는다.
- 특정레지스터 : 프로그램 카운터 / 베이스 레지스터
- * 프로그램카운터와 오퍼랜드 필드의 값을 더한 방식을 상대 주소지정방식
- * 베이스레지스터를 기준으로 오퍼랜드 필드(변위)를 더하여 유효 주소를 얻는 방식 : 베이스 레지스터 주소 지정방식