Machineboy空
CPU ② 레지스터 본문
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) : 인터럽트 발생시 |
![]() |
명령어 레지스터에는 제어장치가 해석할 값이 담기게 된다. |
'Computer > CS' 카테고리의 다른 글
CPU 성능 향상 ① 빠른 CPU를 위한 설계 기법 - 클럭(clock), 코어(core), 스레드(thread) (0) | 2024.01.05 |
---|---|
CPU ③ 명령어 사이클과 인터럽트 (1) | 2024.01.05 |
CPU ① ALU와 제어장치 (1) | 2024.01.04 |
C 언어 컴파일 과정 : 전처리(preprocess) - 컴파일(compile) - 어셈블(assemble) - 링크(link) (0) | 2024.01.04 |
명령어의 구조(연산코드, 오퍼랜드)와 주소 지정 방식 (1) | 2024.01.03 |