이번 강의는 CPU 내부가 어떻게 구성되어 있고 각각의 역할은 무엇인지 배웠다
예전에는 이런거 왜 보나 했지만 지금은 컴퓨터가 내부에서 어떻게 돌아가는지 아는게 너무 재밋네ㅎㅎ
간단하게 말하면
ALU는 계산 장치
제어장치는 제어 신호 발생시키고 명령어를 해석하는 장치
ALU는 레지스터로부터 피 연산자를 받아들이고, 제어장치로부터 제어신호를 받아들임
계산을 하기 위해서는 피연산자와 수행할 연산이 필요(+,-)
메모리가 아닌 레지스터에 결과를 저장하는 이유 -> 접근 속도가 빨라서 임시 저장
플래그라는 것도 내보냄! => 연산 결과에 대한 부가 정보
-> 2진수를 음수로 표현하는 방법
연산결과가 레지스터에 비해 너무 크면 플래그에 명시됨! - 오버 플로우
예시) 부호 플래그, 제로 플래그, 캐리 플래그(올림,빌림수 발생했는지 나타냄)
오버플로우 플래그,
인터럽트 플래그(인터럽트 가능한지! 1이면 가능)
플래그 레지스터에 적혀있고 (부호플래그,제로플래그, 캐리플래그, 인터럽트 플래그)
0 1 0 1
(제어장치가 받아들이는 정보)
클럭
- 컴퓨터의 모든 부품을 일사불란 하게 움직일 수 있게 하는 시간 단위
일정한 박자에 맞춰 발생하는 신호
ex) 메모리에서 명령어 가져오기 는 자신만의 박자가 있음!
해설할 명령어를 받아 들임
명령어 레지스터에 저장 되어있다
해석해서 제어 신호를 내보낸다!
플래그 레지스터로부터 플래그 정보를 받아서 제대로 해석함!
제어신호도 받아들일 수 있음 - 입출력장치 등의 제어신호
외부로부터 제어신호를 받아들이고 어떤 신호인지 파악
제어신호를 CPU내부에 전달(레지스터,ALU) / CPU외부에 전달(메모리, 입출력장치)
다양한 레지스터가 있고 각기 다른 역할을 가진다
프로그램 카운터 - 메모리에서 가져올 명령어의 주소(메모리에서 읽어들일 명령어의 주소)
명령어 레지스터 - 해석할 명령어(방금 메모리에서 읽어 들인 명령어)
메모리 주소 레지스터 - 메모리주소를저장
메모리 버퍼 레지스터 - 메모리와 주고 받을 값
플래그레지스터 : 연산결과 또는 CPU상태에 대한 부가적인 정보
범용레지스터: 다양하고 일반적인 상활에서 자유롭게 사용
스택 포인터: 특별한 주소 지정에 사용! ->스택의 꼭대기를 가리키는 레지스터(스택이 어디까지 차있는지에 대한 표시)
-> 스택은 메모리안에 일정한 공간이 있다!
베이스 레지스터: 특별한 주소 지정에 사용!(변위 주소 지정방식)
-> 오퍼랜드 필드의 값(변위) 과 특정 레지스터의 값을 더하여 유효 주소얻기!!
ex) CPU가 실행하고자하는 프로그램이 메모리에 1000번부터 1500번까지 채워져있다
- 순서대로 실행일때
-> 프로그램 카운터 1000번부터 실행
-> 메모리 주소 레지스터 1000번 주소를 저장
-> 메모리 버퍼 레지스터
- 1000번 주소의 값을 가져옴 그리고 프로그램 카운터 다음 주소로!
-> 명령어 레지스터가 값이 저장 되고 연산장치가 해석
순차적인 실행 흐름이 끊기는 경우
- 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행시, 인터럽트 발생시 등