오늘은 앞서 배웠던 CPU의 핵심 구성 부품 3가지 ALU, 제어장치, 레지스터에 대해서 그 역할과 종류에 대해 더 깊게 배워보고자 한다.
간단히 정리하면
ALU은 CPU의 연산을 담당한다.
제어장치는 명령을 읽어들이고 해석하고 실행한다.
레지스터는 CPU 안에 있는 작은 임시 저장 장치이다.
들어오는 정보
내보내는 정보
연산 수행 결과(특정 문자 혹은 숫자, 메모리 주소)
메모리에 바로 저장되지 않고 일시적으로 레지스터에 저장된다.
<CPU가 메모리에 접근하는 횟수가 많아질수록 프로그램 실행 속도가 느려질 수 있기 때문에>
플래그 : 연산 결과에 대한 추가정보인 정보
이 플래그를 플래그 레지스터에 보낸다.
플래그 종류 | 의미 |
---|---|
부호 플래그 | 1: 음수 0:양수 |
제로 플래그 | 1: 연산 결과가 0인 경우/ 0: 연산 결과가 0이 아닌 경우 |
캐리 플래그 | 1: 올림수, 빌림수 발생 / 0: 발생하지 않음 |
오버플로우 플래그 | 1: 오버플로우 발생 / 0: 발생하지 않음 |
인터럽트 플래그 | 1: 인터럽트 가능 / 0: 인터럽트 불가능 |
슈퍼바이저 플래그 | 1: 커널 모드 실행 / 0: 사용자 모드 실행 |
-> CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 일종의 참고 정보
제어장치는 제어신호(컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호)를 내보내고, 명령어를 해석하는 부품이다.
이 또한 받아들이는 정보와 내보내는 정보 2가지로 나누어 설명한다.
프로그램 속 명령어와 데이터들은 실행 전후로 반드시 레지스터에 저장된다.
CPU가 공통적으로 포함하는 6개의 레지스터에 대해서 정리한다.
프로그램 카운터
= 메모리에서 가져올 명령어의 주소
= 메모리에서 읽어들일 명령어의 주소가 저장된다.
= "명령어 포인터"라고도 한다.
카운터라는 이름이 붙은 이유는 만약 현재 명령어의 주소가 6이고 이를 제어신호와 ALU가 해석하고 연산한 하면 명령어의 주소가 +1되어 명령어의 주소가 7을 가리키는 방식
메모리 주소 레지스터
프로그램 카운터가 가리키는 명령어의 주소를 메모리 주소 레지스터가 받아서 주소 버스로 보내는 역할 + 제어장치가 제어 버스로 메모리 "읽기" 신호를 보낸다.
메모리 버퍼 레지스터
메모리 주소 레지스터와 제어 신호로 메모리와 주고 받는 데이터는 데이터 버스를 통해 주고 받는데 그 데이터는 메모리 버퍼 레지스터에 저장된다.
명령어 레지스터
방금 읽어 들인 명령어가 저장된다. 이는 메모리 버퍼 레지스터에 저장된 명령어가 명령어 레지스터로 가기 때문이다.
제어 장치는 이 명령어 레지스터 속 명령어를 해석하고 제어신호를 내보낸다.
범용 레지스터
데이터와 주소 모두 저장할 수 있다.
플래그 레지스터
앞서 배웠듯이 연산결과에 대한 추가적인 정보를 저장하고 있다.
먼저 앞서 배운 내용을 정리해본다.
명령어 = 연산코드 + 오퍼랜드
오퍼랜드
= 연산에 사용할 데이터 또는
= 연산에 사용할 데이터가 저장된 메모리의 주소 또는
= 연산에 사용할 데이터가 저장된 레지스터의 주소가 저장된다.
주소 지정 방식(오퍼랜드 필드를 통해 연산에 사용할 데이터를 찾는 방식)
- 즉시 주소 지정 방식 : 데이터가 직접 명시
- 직접 주소 지정 방식 : 데이터가 저장된 메모리의 주소 명시
- 간접 주소 지정 방식 : 유효 주소의 주소가 명시 + 유효주소와 연산에 사용할 데이터 모두 메모리에 저장되어 있다.
- 레지스터 주소 지정 방식 : 데이터가 저장된 레지스터의 주소 명시
- 레지스터 간접 주소 지정 방식 : 유효주소를 저장한 레지스터의 주소 + 레지스터에는 유효주소가 메모리에는 연산에 사용할 데이터가 저장되어 있다.
이번에는 주소지정방식 중에서 특정 레지스터를 사용하는 방법에 대해서 배운다.
스택 주소 지정 방식
오퍼랜드에는 스택의 꼭대기를 가리키는 레지스터인 스택 포인터에 대한 주소가 저장된다.
스택은 어디에 있는걸까?
스택은 메모리에 있다.
메모리 안에 스택처럼 사용할 수 있는 스택 영역이 정해져있다.
변위 주소 지정 방식
변위 주소 지정 방식은 오퍼랜드 필드에 어떤 변위 값이 담기고 그 값과 레지스터에 담긴 값을 더하여 메모리의 저장된 유효주소의 주소를 알아내는 방법이다. 즉 레지스터 간접 주소 방식의 변형이다.
이 명령어는
연산코드 + 레지스터 필드 + 오퍼랜드
로 구성되어져 있다.
레지스터 필드에는 어떤 레지스터를 이용할 것인가에 대한 것으로 레지스터의 종류가 담긴다.
그 종류는 2가지이다. 프로그램 카운터, 베이스 레지스터