■ 레지스터
레지스터는 CPU 내부의 작은 임시저장장치이다.
프로그램 속 명령어 & 데이터는 실행 전후로 반드시 관련 값들이 레지스터에 저장됨.
그렇기에 레지스터 값만 잘 관찰해도 프로그램의 실행 흐름을 잘 파악할 수 있다.
(보통, 깊숙한 곳까지 봐야하는, 로우레벨 개발자분들이 많이 관찰하신다고 함)
* 레지스터에는 다양한 종류가 있으며, 각각의 역할이 다르다.
[반드시 알아야할 레지스터 종류]
1. 프로그램 카운터 (PC)
2. 명령어 레지스터
3. 메모리 주소 레지스터
4. 메모리 버퍼 레지스터
5. 플래그 레지스터
6. 범용 레지스터
7. 스택 포인터
8. 베이스 레지스터
* CPU 종류마다 레지스터 종류 및 네이밍이 다를 수 있음
■ 프로그램 카운터 (PC; Program Counter)
· 메모리에서 가져올 명령어의 주소를 저장하는 레지스터.
· Instruction Pointer (명령어 포인터; IP)라고 부르기도 함.
■ 명령어 레지스터 (IR; Instruction Register)
· 해석할 명령어를 저장하는 레지스터. 즉, 방금 메모리에서 읽어 들인 명령어를 저장함.
· 해당 레지스터가 내포하는 명령어를 제어장치가 해석한 뒤 제어 신호를 내보낸다.
■ 메모리 주소 레지스터 (MAR; Memory Address Register)
· 메모리의 주소를 저장하는 레지스터.
· CPU가 읽어 들이고자 하는 주소를 주소 버스를 통해 보낼 때 거치는 레지스터임.
[복습: 시스템 버스 주요 세 가지 종류]
1. 데이터 버스
2. 제어 버스
3. 주소 버스
https://yjhdevelopdiary.tistory.com/225
■ 메모리 버퍼 레지스터 (MBR; Memory Buffer Register)
· 메모리 쓰기를 할 때는 쓰려고 하는 값을 저장하고 메모리 읽기 시에는 메모리로부터 전달 받은 값을 저장한다.
(즉, 데이터와 명령어를 저장한다.)
· CPU가 정보를 데이터 버스로 주고 받을 때 거치는 레지스터
· 메모리 데이터 레지스터 (MDR; Memory Data Register)라고도 부름
■ 프로그램 실행 과정에서 레지스터 내 발생하는 현상
1. 프로그램이 메모리에 적재되어 실행될 때 프로그램 카운터(PC)는 시작 주소를 갖는다.
2. 메모리 주소 레지스터에 프로그램 카운터 내에 담겨있는 주소값이 복사되어 저장된다.
3. 메모리 주소 레지스터에 등록되어있는 주소값을 '주소 버스'를 통해 참조 후 해당 주소에 내포되어있는 값을 확인한다.
이때 추가로 제어 신호(메모리 읽기)를 '제어 버스'를 통해 쏴주면서 해당 주소의 메모리 값을 읽는 행위를 한다면 아래와 같이 진행된다.
4. 해당 주소에 들어있는 값을 '메모리 버퍼 레지스터'에, 데이터 버스를 통해, 등록을 해주면서 프로그램 카운터(PC)를 +1를 해준다. 왜냐하면 다음으로 실행할 주소를 확인해야하기 때문이다.
* PC가 1씩 증가함은 프로그램이 순차적으로 실행되는 것의 원리가 된다.
5. 메모리 버퍼 레지스터에 등록되어있는 데이터를 제어장치가 해석하기 위해 해당 값을 명령어 레지스터에 복사를 하게 된다.
5까지의 과정을 마친 뒤 증가된 PC(프로그램 카운터) 값에 따라 101번지의 명령어를 CPU로 부터 읽어들인 뒤 처리한다.
이와같이 프로그램 카운터는 지속적으로 1씩 증가하여 차례대로 다음 명령어를 읽어들일 준비를 한다.
이 과정이 반복됨으로써 CPU는 프로그램을 순차적으로 실행한다.
■ 순차적인 실행 흐름이 끊기는 경우
위와 같이 일반적으로 프로그램은 PC의 증가에 따라 차례대로 명령어를 실행해야 한다. 하지만, 종종 PC가 실행 중인 명렁어의 다음 번지가 아닌 다른 값으로 업데이트 되는 경우가 있는데 이는 아래와 같은 상황에서 발생한다.
(1) 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시
(e.g JUMP, CONDITIONAL JUMP, CALL, RET)
(2) 인터럽트 발생 시
(3) 그 외
■ 플래그 레지스터
· 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 담고 있는 플래그(Flag)를 저장하는 레지스터이다.
■ 범용 레지스터
· 다양하고 일반적인 상황에서 자유롭게 사용. 보통 여러 개가 존재하면서 주소, 명령어 등 데이터의 종류 상관없이 담을 수 있다. CPU 내에 여러 개의 범용 레지스터가 존재한다.
■ 스택 포인터 (Stack Pointer)
· 스택의 꼭대기를 가리키는 레지스터 (스택이 어디까지 차 있는지에 대한 표시)
· 스택과 스택 포인터를 이용한 주소 지정 방식 [스택 주소 지정 방식]에서 사용됨.
· 스택 포인터가 가리키는 주소는 메모리 내 스택 영역에 존재함.
■ 변위주소 지정 방식 (Displacement Addressing Mode)
· 오퍼랜드 필드의 값[변위]과 특정 레지스터의 값을 더하여 유효 주소를 얻는 방식
· 변위 주소 지정방식도 크게 두 가지가 있음. CPU 종류마다 사용되는 양상이 많이 다르지만 공통적으로 사용되는 방식은 아래 두 가지임
(1) 상대 주소 지정방식 (Relative Addressing Mode)
(2) 베이스레지스터 주소 지정방식 (Base-register Addressing Mode)
■ 상대주소 지정방식
· 오퍼랜드 필드 값[변위]과 프로그램 카운터 [PC]의 값을 더하여 유효 주소를 얻는 방식
[오퍼랜드 필드 값 + 프로그램 카운터 = 유효주소]
■ 베이스레지스터 주소 지정방식
· 오퍼랜드 필드의 값[변위]과 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
· 쉽게 생각해보자면 베이스 레지스터는 기준이 되는 주소를 의미함
[오퍼랜드 필드 값 + 베이스 레지스터 = 유효주소]
'Computer Science > Computer Architecture' 카테고리의 다른 글
[컴퓨터 구조] 명령어 병렬 처리기법 (ILP) (2) | 2024.10.06 |
---|---|
[컴퓨터 구조] 명령어 사이클, 인터럽트 (2) | 2024.10.02 |
[컴퓨터 구조] 명령어, 주소 지정 방식 (0) | 2024.09.17 |
[컴퓨터 구조] ALU, 제어 장치 (0) | 2024.09.17 |
[컴퓨터 구조] 고급언어와 저급언어 (0) | 2024.08.25 |