레지스터 종류와 역할, 각 레지스터를 통해 명령어가 처리되는 과정 알아보기.
CPU 안에는 많은 레지스터가 존재하고 각자 다른 역할을 하고 있다.
1️⃣ 프로그램 카운터
프로그램 카운터(PC; Program Counter)는 메모리에서 가져올 명령어의 주소
메모리에서 읽어 들일 명령어의 주소를 저장한다. 프로그램 카운터를 명령어 포인터(IP; Instructiong Pointer)라고 부르는 CPU도 있다.
2️⃣ 명령어 레지스터
명령어 레지스터(IR; Instruction Register)는 해석할 명령어
방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터이다. 제어장치는 명령어 레지스터 속 명령어를 받아들이고 이를 해석한 뒤 제어신호를 내보낸다.
3️⃣ 메모리 주소 레지스터
메모리 주소 레지스터(MAR; Memory Address Register)는 메모리의 주소를 저장하는 레지스터이다.
CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거치게 된다.
4️⃣ 메모리 버퍼 레지스터
메모리 버퍼 레지스터(MBR; Memory Buffer Register)는 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터이다.
메모리에 쓰고 싶은 값이나 메모리부터 전달받은 값은 메모리 버퍼 레지스터를 거친다. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고받은 값은 메모리 버퍼 레지스터를 거친다.
메모리 버퍼 레지스터는 메모리 데이터 레지스터(MDR; Memory Data Register)라고도 부른다.
✅ 순차적 실행 흐름이 끊기는 경우
일반적으로 프로그램 카운터는 꾸준하게 증가하며 프로그램을 차례대로 실행한다. 하지만 종종 프로그램 카운터가 실행 중인 명령어의 다음 번지 주소가 아닌 전혀 다른 값으로 업데이트되는 경우가 있다. 이런 상황에서는 프로그램이 차례대로 실행되지 않는다. 어떨 때 이런 상황이 발생할까?
명령어 중 JUMP, CONDITIONAL JUMP, CALL, RET와 같이 특정 메모리 주소로 실행 흐름을 이동하는 명령어가 실행되었을 때 프로그램은 차례대로 실행되지 않는다고 한다. 이런 경우 프로그램 카운터는 변경된 주소가 저장된다.
예를 들어 1200번지를 실행하는 도중 JUMP 2500이라는 명령어를 만나면 이 명령어는 "2500번지로 점프하라", "2500번지로부터 실행하라"라는 명령어이다. 이 명령어를 실행한 다음에는 1201번지가 아닌 2500번지를 실행해야 하고 프로그램 카운터에는 2500번지가 저장되는 것이다. 또한, 인터럽트가 발생해도 프로그램의 순차적인 실행 흐름이 끊어진다.
5️⃣ 범용 레지스터
범용 레지스터(general purpose register)는 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터이다.
메모리 버퍼 레지스터는 데이터 버스로 주고받을 값만 저장하고, 메모리 주소 레지스터는 주소 버스로 내보낼 주소값만 저장하지만, 범용 레지스터는 데이터와 주소를 모두 저장할 수 있다. 일반적으로 CPU 안에는 여러 개의 범용 레지스터들이 있고, 현대 대다수 CPU는 모두 범용 레지스터를 가지고 있다.
6️⃣ 플래그 레지스터
플래그 레지스터(flag register)는 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터이다.
ALU 연산 결과에 따른 플래그를 플래그 레지스터에 저장한다.
7️⃣상대 주소 지정 방식
상대 주소 지정 방식(relative addressing mode)은 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식이다.
프로그램 카운터에는 읽어 들일 명령어의 주소가 저장되어 있다.
만약 오퍼랜드가 음수, 예를 들어 -3이었다면 CPU는 읽어 들이기로 한 명령어로부터 '세 번째 이전' 번지로 접근한다. 한마디로 실행하려는 명령어의 세 칸 이전 번지 명령어를 실행하는 것이다.
반면에 오퍼랜드가 양수, 예를 들어 3이었다면 CPU는 읽어 들이기로 했던 명령어의 '세 번째 이후' 번지로 접근한다. 실행하려는 명령어에서 세 칸 건너뛴 번지를 실행하는 것이다.
8️⃣ 베이스 레지스터 주소 지정 방식
베이스 레지스터 주소 지정 방식(base-register addressing mode)은 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식이다.
여기서 베이스 레지스터는 '기준 주소', 오퍼랜드는 '기준 주소로부터 떨어진 거리'로서의 역할을 한다.
베이스 주소 지정 방식은 베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는 주소에 접근할 것인지를 연산하여 유효 주소를 얻어내는 방식이다.
예를 들어 베이스 레지스터에 200이라는 값이 있고 오퍼랜드가 40이라면 "기준 주소 200번지로부터 40만큼 떨어진 240번지로 접근하라"를 의미한다. 또 베이스 레지스터에 550이라는 값이 담겨 있고 오퍼랜드가 50이라면 "기준 주소 550번지로부터 50만큼 떨어진 600번지로 접근하라"를 의미한다.
참고자료 -
혼자 공부하는 컴퓨터구조 + 운영체제 / 한빛미디어
image -
'CS' 카테고리의 다른 글
[CS] 하드웨어 인터럽트 (0) | 2023.02.09 |
---|---|
[CS] 명령어 사이클과 인터럽트 (0) | 2023.02.07 |
[CS] ALU와 제어장치 (0) | 2023.01.31 |
[CS] 다양한 주소 지정 방식 (0) | 2023.01.19 |
[CS] 명령어의 구조 (0) | 2023.01.17 |