✏️ ALU
- CPU 에서 계산을 담당하는 장치이다.
- 계산을 하기 위해서 레지스터로부터 피연산자를 받아들이고,
제어장치로부터 제어신호를 받아드린다.
- 계산이 완료된 정보는 레지스터로 보내 저장한다.
- 메모리보다 속도가 빠르기 때문에 레지스터에 저장시킴
📍 플래그
- ALU 는 계산 결과이외에도 플래그를 추가적으로 레지스터에 저장시키기도 한다.
- 플래그는 연산 결과에 대한 부가정보를 의미한다.
- 생성된 플래그는 일반 레지스터가 아닌 플래그 레지스터에 저장된다.
✏️ 제어장치
- CPU 에서 제어 신호를 발생시키고 명령어를 해석하는 장치이다.
📍 주요 기능
- 클럭
- 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
- 메트로놈 처럼 클럭 주기를 측정한다.
- 클럭 주기를 통해 업무를 클럭 단위로 계획하고 실행한다.
- 명령어 해석
- 명령어 레지스터로부터 해석할 명령어를 받아드린다.
- 플래그 해석
- 플래그 래지스터로부터 플래그를 받아드려 명령어를 해석하기 위해 사용한다.
- 제어 신호 해석
- 제어장치 이외에도 외부 입출력 장치에서 제어 신호를 발생시킬 수 있다.
- 이러한 외부 신호를 제어장치에서 해석한다.
- CPU 내부에 정보 전달
- CPU 외부로 정보 전달
✏️ 레지스터
- CPU 내부의 작은 임시 저장장치
- 프로그램 속 명령어와 데이터는 실행 전후로 레지스터에 저장된다.
📍 주요 레지스터
- CPU 종류마다 레지스터의 종류와 이름이 다르기때문에 공통적으로 주로 사용되는 레지스터만 알아보자
- 프로그램 카운터
- 메모리에서 읽어들일 명령어의 주소를 저장
- 즉, 가져와야 할 명령어의 주소를 의미한다.
- 명령어 레지스터
- 방금 메모리에서 읽어들인 명령어를 저장
- 즉, 해석해야 할 명령어를 의미
- 저장된 정보는 제어장치로 보내 해석후 제어신호를 내보내게 된다.
- 메모리 주소 레지스터
- 메모리의 주소를 저장
- CPU 가 메모리로부터 주소값을 읽어들여야 할 때 주소 레지스터에서 메모리 주소를 확인 후 주소버스를 통해 읽어드린다.
- 메모리 버퍼 레지스터
- 메모리와 주고받을 값을 저장한다.
- 값은 데이터와 명령어를 의미
- 플래그 레지스터
- 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장
- 범용 레지스터
- 다양하고 일반적인 상황에서 자유롭게 사용되는 레지스터
- 스택 포인터
- 스택 주소 지정 방식을 사용한 주소 지정에 사용됨
- 스택 포인터는 스택의 꼭대기를 가리킨다
- 스택 영역은 메모리의 한 부분을 할당받아 사용된다.
- 베이스 레지스터
- 변위 주소 지정 방식을 사용한 주소 지정에 사용된다.
- 오퍼랜드 필드의 값(변위) 과 특정 레지스터의 값(기준)을 더하여 유효 주소를 얻는 방식이다.
- 오퍼랜드를 어떤 레지스터의 값과 더해야되는지도 알아야 되기 때문에 명령어에 연산코드, 레지스터, 오퍼랜드 3가지 정보가 포함된다.
📍 레지스터의 작동 순서 (1번 ~ 4번)
- 상황
- CPU 가 실행해야 할 프로그램이 메모리에 1000 ~ 1003 번지에 저장되어 있다.
- 1000 번지부터 순서대로 실행해야 한다.
- 프로그램 카운터에 가장 먼저 실행해야 할 1000 번지가 저장된다.
- 메모리 주소 레지스터에 읽고자 할 주소인 1000 이 복사되 저장 된다.
- 메모리 주소 레지스터는 주소 버스를 통해 메모리의 1000 번지에 신호를 보낸다.
- 이때 제어장치는 메모리 읽기 신호를 제어 버스를 통해 데이터 요청신호를 보낸다.
- 제어신호를 받은 메모리는 1000 번지의 값을 메모리 버퍼 레지스터로 데이터 버스를 통해 전달한다.
- 이때 저장되는 값은 주소값이 아닌 데이터 값이 저장된다.
- 프로그램 카운터는 다음 실행해야 할 주소인 1001 번지로 순차적 흐름으로 1씩 증가된다.
- 이제 메모리 버퍼 레지스터에 저장된 데이터를 해석하기 위해 명령어 레지스터에 복사한다.
- 명령어 레지스터에 저장된 값은 제어장치로 보내저 처리된다.
- 2번부터 반복해 마지막 프로그램 실행목록 1003 번지까지 수행한다.