티스토리 뷰
https://www.youtube.com/watch?v=lehWiAsIDrQ&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=11
초심으로 돌아가서 다시 정리하는 개념입니다.
이미 알고 있어 스킵하는 부분도 있으니, 직접 보시는 걸 추천드립니다.
ALU
CPU에 들어 있는 연산장치
제어장치로부터 제어신호를 받아 레지스터로부터 데이터를 받는다.
ALU가 내보내는 정보는 레지스터에 결과값으로 내보낸다.
접근속도가 더 빠르기 때문
플래그 레지스터에 연산 결과를 담는 역할도 한다.
연산 결과가 레지스터에 비해 너무 크면 오버플로우라고 한다.
부호, 제로, 캐리, 오버플로우, 인터럽트, 슈퍼바이저 플래그 등이 있다.
제어장치
클럭 신호 - 시간 단위 (RLC 회로를 알고 있다면 RLC 그래프를 생각하면 쉽다)
부품은 일정한 박자에 맞춰 메모리에서 클럭 신호를 바탕으로 움직인다.
해석할 명령어는 명령어 레지스터에 저장되어 있다.
해석해서 제어신호로 내보낸다.
그 이외에 플래그 값, 제어신호(다른 부품도 제어 신호 발산)를 받아들이는 역할도 한다.
CPU 내부에 전달하는 제어 신호와 메모리와 입출력장치에 내보내는 외부 제어 신호가 있다.
레지스터
레지스터 안에 있는 값을 관찰하는 일은 ALU나 제어장치보다 많다.
레지스터마다 역할이 다르다.
레지스터는 프로그래머가 들여다 볼 수도 있기 때문에 중요하다.
프로그래머가 반드시 알아야 할 공통 레지스터 1
1. 프로그램 카운터 : 메모리에서 가져올 명령어의 주소(메모리에서 읽어 들일 명령어의 주소) - instuction pointer
2. 명령어 레지스터 : 해석할 명령어 (방금 메모리에서 읽어 들인 명령어) - 제어장치가 해석
3. 메모리 주소 레지스터 : 메모리의 주소 저장 - CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거친다.
4. 메모리 버퍼 레지스터 : 메모리와 주고받을 값(데이터와 명령어) - CPU가 정보를 데이터 버스로 주고 받을 때 거친다.
메모리에 1000번지부터 1500번지까지 담겨 있다고 했을 떄, 1000번지를 부른다고 해보자.
예시
> 프로그램 카운터 : 1000번지 저장(다음으로 실행할 명령어의 주소)
> 메모리 주소 레지스터 : 프로그램 카운터의 1000번지가 메모리 주소 레지스터로 복사가 된다.
> 그리고 나서 메모리 주소를 주소 버스를 통해 메모리로 쏴준다.
> 그러면 메모리는 데이터 버스를 통해 메모리 버퍼 레지스터에 데이터를 쏴주고, 이때 프로그램 카운터가 1 증가된다.
> 마지막으로 명령어 레지스터에 제어장치가 해석할 명령어(데이터)가 담긴다.
프로그램 카운터 -> 메모리 주소 레지스터 -> 주소 버스 -> 메모리 -> 데이터 버스 -> 메모리 버퍼 레지스터 -> 명령어 레지스터 순서
프로그램 카운터가 1 증가되는 것은 프로그램이 순차적으로 진행될 수 있는 원리가 된다.
순차적인 실행 흐름은 실행 흐름을 이동하는 명령어를 실행하면 끊기게 된다.(인터럽트 등)
프로그래머가 반드시 알아야 할 공통 레지스터 2
5. 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 담는 레지스터
6. 범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용
7. 스택 포인터 : 스택의 꼭대기를 가리킨다
8. 베이스 레지스터 : 기준 주소를 저장한다
스택 포인터는 스택 주소 지정 방식을 사용한다.
- 스택과 스택 포인터를 이용한 주소 지정 방식
- 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터 (스택이 어디까지 차 있는지에 대한 표시)
스택은 메모리 안에 스택 영역이 따로 있다.
베이스 레지스터는 변위 주소 지정 방식을 사용한다.
- 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소 얻기
- 변위 주소 지정 방식의 명령어는 연산 코드 + 레지스터의 종류 + 오퍼랜드 형식으로 되어 있다.
- CPU의 레지스터의 값과 오퍼랜드의 값을 더하기 때문이다.
또는 오퍼랜드 필드의 값과 프로그램 카운터, 베이스 레지스터를 더해서 얻는 방식도 있다.
- 상대 주소 지정 방식 : 레지스터 대신 프로그램 카운터와 값을 더해서 유효 주소 얻기
ex) 실행할 명령어 -3번지에서 실행해라
- 변위 주소 지정 방식 : 베이스 레지스터는 기준 주소를 담는다.
그리고 그곳으로 부터 베이스 레지스터의 값이 떨어진 곳의 유효 주소를 얻는다.
ex) 200이 베이스 레지스터가 담겨 있고, 오퍼랜드에 50이 들어있다면 250번지를 택한다.