CPU는 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 장치이다. 그리고 CPU 내부에는 계산을 담당하는 ALU, 명령어를 읽어 들이고 해석하는 제어장치, 작은 임시 장치인 레지스터라는 구성요소가 있다.

이번 절에서는 ALU와 제어장치를 학습한다.

ALU

스크린샷 2022-11-05 오후 3.38.27.png

ALU는 계산하는 부품이라 1+2를 계산할 때 1과 2라는 피연산자와 더하기라는 수행할 연산이 필요하듯이 ALU가 계산을 하기 위해서는 피연산자와 수행할 연산이 필요하다는 의미이다.

그래서 ALU는 레지스터를 통해 **피연산자**를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 **제어 신호**를 받아들인다. ALU는 레지스터와 제어장치로부터 받아들인 피연산자와 제어 신호로 산술 연산, 논리 연산 등 다양한 연산을 수행한다.

ALU가 내보내는 정보

연산을 수행한 결과는 특정 숫자나 문자가 될 수도 있고, 메모리 주소가 될 수도 있다. 그리고 이 결괏값은 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장된다.

CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느리다. ALU가 연산할 때마다 결과를 메모리에 저장한다면 당연하게도 CPU는 메모리에 자주 접근하게 되고, 이는 CPU가 프로그램 실행 속도를 늦출 수 있다. 그래서 ALU의 결괏값을 메모리가 아닌 레지스터에 우선 저장하는 것이다.

또한, ALU는 계산 결과와 더불어 플래그 를 내보낸다.

이처럼 때때로 ALU는 결괏값뿐만 아니라 연산 결과에 대한 추가적인 정보를 내보내야 할 때가 있다. 가령 연산 결과가 음수일 때 ALU는 방금 계산한 결과는 음수 라는 추가 정보를 내보낸다. 혹은 연산 결과가 연산 결과를 담을 레지스터보다 클 때 ALU는 결괏값이 너무 크다 라는 추가 정보를 내보낸다.