CPU안에는 ALU, 제어장치 말고도 레지스터라는 작은 임시장치가 존재해.
프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장되지.
그래서 레지스터 속 값을 유심히 관찰하면 프로그램을 실행할 때 CPU내에서 무슨일이 벌어지고 있는지, 어떤 명령어가 어떻게 수행되는지 알 수 있어
- 프로그램 카운터
- 명령어 레지스터
- 메모리 주소 레지스터
- 메모리 버퍼 레지스터
- 플래그 레지스터
- 범용 레지스터
- 스택 포인터
- 베이스 레지스터
프로그램 카운터는 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장해.
명령어 레지스터는 해석할 명령어, 즉 방금 메모리에서 읽어들인 명령어를 저장하는 레지스터야. 제어장치는 명령어 레지스터 속 명령어를 받아들이고 이를 해석한 뒤 제어신호를 내보내지.
메모리 주소 레지스터는 메모리의 주소를 저장하는 레지스터야. CPU가 읽어 들이고자 하는 주소값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거치게 돼.
메모리 버퍼 레지스터는 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터야. 즉 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거치게 돼. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고받을 값은 메모리 버퍼 레지스터를 거쳐
앞의 레지스터들 작동 방식
- CPU로 실행할 프로그램이 1000번지부터 1500번지까지 저장되어 있다. 1000번지에는 1101(2)가 저장되어 있다.
- 프로그램을 처음부터 실행하기 위해 PC에는 1000이 저장됨. 이는 메모리에서 가져올 명령어가 1000번지에 있다는 것을 의미한다.
- 1000번지를 읽어들이기 위해 주소 버스로 1000번지를 내보냄. 이를 위해 메모리 주소 레지스터에는 1000이 저장됨.
- '메모리 읽기' 제어신호와 메모리 주소 레지스터 값이 각각 제어 버스와 주소 버스를 통해 메모리로 보내짐.
- 메모리 1000번지에 저장된 값은 데이터 버스를 통해 메모리 버퍼 레지스터로 전달되고, 프로그램 카운터는 증가되어 다음 명령어를 읽어 들일 준비를 함.
- 메모리 버퍼 레지스터에 저장된 값은 명령어 레지스터로 이동
- 제어장치는 명령어 레지스터의 명령어를 해석하고 제어 신호를 발생시킴.
범용 레지스터는 이름그대로 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터야. 메모리 버퍼 레지스터는 데이터 버스로 주고받을 값만 저장하고, 메모리 주소 레지스터는 주소 버스로 내보낼 주소값만 저장하지만, 범용 레지스터는 데이터와 주소를 모두 저장할 수 있지. 일반적으로 CPU 안에는 여러개의 범용 레지스터들이 있고, 현대 대다수의 CPU는 모두 범용 레지스터를 가지고 있어.
플래그 레지스터는 연산결과, CPU 상태에 대한 부가적인 정보를 저장하는 레지스터야. ALU 연산 결과에 따른 플래그를 플래그 레지스터에 저장해.
프로그램 카운터, 스택 포인터, 베이스 레지스터는 주소 지정에 사용될 수 있는 특별한 레지스터야. 스택 포인터는 스택 주소 지정 방식이라는 주소 지정 방식에 사용되고, 프로그램 카운터와 베이스 레지스터는 변위 주소 지정 방식이라는 주소 지정방식에 사용돼.
스택 주소 지정 방식은 스택과 스택 포인터를 이용한 주소 지정방식이야.
스택 포인터는 스택의 꼭대기르르 가리키는 레지스터야. 즉 스택 포인터는 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터이지
여기서의 스택은 자료구조의 개념적 스택과 같은 동시에 메모리 상의 있는 물리적 스택의 개념이야. 정확히는 메모리 안에 스택처럼 사용할 영역이 정해져 있는거지.
명령어는 연산코드와 오퍼랜드로 이루어져 있어. 그리고 오퍼랜드 필드에는 메모리의 주소가 담길 때도 있지. 변위 주소 지정 방식이란 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식이야.
이때 변위 주소 지정 방식은 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라 상대 주소 지정 방식, 베이스 레지스터 주소 지정 방식 등으로 나뉘어.
상대주소 지정 방식
상대 주소 지정 방식은 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식이야.
베이스 레지스터 지정 방식
베이스 레지스터 주소 지정 방식은 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식이야.