Machineboy空

CPU ② 레지스터 본문

Computer/CS

CPU ② 레지스터

안녕도라 2024. 1. 4. 12:34

CPU 구성품 중 레지스터

 

시스템, 임베디드, 해킹 분야의 경우 레지스터 안에 어떤 값이 담겼는지 관찰하게 되는 경우가  많다. 

ALU나 제어장치에 비해 좀 더 중요하게 살펴 볼 필요가 있다!


반드시 알아야 하는 레지스터 종류

 

* CPU 종류마다 레지스터의 갯수, 종류가 다르다

* 하지만 공통적으로 포함하는 레지스터들.

  이름 저장하는 내용과 용도
1 프로그램 카운터 메모리에서 가져올 명령어의 주소
 = 메모리에서 읽어들일 명령어의 주소
*타 CPU에서는 명령어 포인터( Instruction Pointer)라고  부르기도 함
2 명령어 레지스터 해석할 명령어
= 방금 메모리에서 읽어 들인 명령어
제어장치가 해석
3 메모리 주소 레지스터 메모리의 주소
CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터
4 메모리 버퍼 레지스터 메모리와 주고받을 값
= 데이터와 명령어
CPU가 정보를 데이터 버스로 주고 받을 때 거치는 레지스터
5 플래그 레지스터 연산 결과 또는 CPU 상태에 대한 부가적인 정보
 
6 범용 레지스터 다양하고 일반적인 상황에서 자유롭게 사용
보통 여러 개 있다.
7 스택 포인터 * 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식
* 스택 포인터: 스택의 꼭대기를 가리키는 레지스터 (스택이 어디까지 차 있는지에 대한 표시)
메모리 안에 스택 영역이 따로 존재

8 베이스 레지스터


* 변위 주소 지정 방식: 오퍼랜드 필드 값(변위)과 특정 레지스터(프로그램 카운터 or 베이스 레지스터)의 값을 더하여 유효 주소 얻기
*상대주소 지정 방식: 오퍼랜드 필드의  값(변위)과 프로그램 카운터의 값을 더하여 유효주소 얻기

*베이스 레지스터 주소 지정 방식: 오퍼랜드 필드의  값(변위)과 베이스 레지스터의 값을 더하여 유효주소 얻기

 


레지스터 동작 프로세스

cpu가 실행할 프로그램이 1000번지 ~ 1500번지까지 저장되어 있다고 가정하고
처음부터 실행한다.
프로그램 카운터 (읽어 들일 명령어의 주소)에는 프로그램의 첫번째 데이터인 1000번지가 담기게 된다.

프로그램 카운터에 담긴 값의 의미: 1000번지 실행할 거야!
읽어 들인 값을 메모리 주소 레지스터에 복사한다.
메모리 한테 메모리 읽기 제어신호와 함께, 몇 번지 주소를 읽을 건지 주소를 알려준다.

메모리 주소 레지스터에 담긴 값의 의미: 내가 원하는 주소는 1000번지야!
메모리는 1000번지에 담긴 값을 메모리 버퍼 레지스터로 전달 through 데이터 버스.
그리고 프로그램 카운터의 값은 1이 증가한다(다음으로 실행할 주소로 순차적 진행)

* 마냥 1씩 증가하는 것은 아니다. 순차적 실행 흐름이 끊기는 경우도 존재.

: 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시
 (ex. JUMP, CONDITIONAL JUMP, CALL, RET)

: 인터럽트 발생시
명령어 레지스터에는 제어장치가 해석할 값이 담기게 된다.