본문 바로가기
책/혼공 컴퓨터구조+운영체제

컴퓨터 구조 - 레지스터(프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터등), 스택 주소 지정방식, 변위 주소 지정 방식

by 코딩하는 돼징 2023. 11. 19.
반응형

프로그램 속 명령어와 데이터 실행 전후로 반드시 레지스터에 저장된다. 따라서 레지스터에 저장된 값만 잘 관찰해도 프로그램의 실행 흐름을 파악할 수 있다. 다시 말해 레지스터 속 값을 유심히 관찰하면 프로그램을 실행할 때 CPU내에서 무슨 일이 벌어지고 있는지 어떤 명령어가 어떻게 수행되는지 알 수 있다.

 

그러므로 레지스터만 잘 관찰해도 프로그램의 자세한 실행 과정을 알 수 있다.


상용화된 CPU속 레지스터들은 CPU마다 이름, 크기, 종류가 매우 다양하다. 대부분의 CPU들이 공통적으로 가지고 있는 레지스터들에 대해 알아보자

01 프로그램 카운터(PC, Program Counter)

기능 : 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장하고 다음에 실행될 명령어의 위치를 가리킨다.

활용 : 명령어의 순차적인 실행을 제어해서 프로그램 카운터를 명렁어 포인터(IP, Instruction Pointer)라고 부르는 CPU도 있다. 명령어가 실행될때마다 증가하며 분기 또는 서브루틴 호출/복귀 등의 특정 명령어는 프로그램 카운터에 실행해야 위치가 바로 다음 코드가 아니라 새로운 기계어 코드의 위치 값이 들어간다.


02 명령어 레지스터(IR, Instruction Register)

기능 : 현재 실행 중인 명령어를 저장하는 레지스터로 제어 장치가 명령어를 해석하는데 사용된다.

활용 : 명령어 레지스터에 저장된 명령어의 연산 코드와 피연산자 등을 분석하여 CPU가 수행해야 할 동작을 결정하고 제어 신호를 생성한다.


03 메모리 주소 레지스터(MAR, Memory Address Register)

기능 : 메모리의 주소를 저장하는 레지스터로 CPU가 메모리에 게이터를 읽거나 쓸때 사용된다.

활용 : CPU가 메모리에 데이터를 요청할 때 메모리 주소 레지스터에 저장된 주소가 주소 버스를 통해 메모리로 전송되어 해당 주소의 데이터를 가져온다.


04 메모리 버퍼 레지스터(MBR, Memory Buffer Register)

기능 : 메모리와 주고 받을 데이터를 저장하는 레지스터로 CPU와 메모리 간 데이터 전송에 사용된다.

활용 : CPU가 메모리로부터 읽어온 데이터는 메모리 버퍼 레지스터에 저장되며 CPU가 메모리에 데이터를 쓸 때도 메모리 버퍼 레지스터에 저장된 값이 메모리에 전송된다.


 

프로그램을 실행하는 과정에서 다양한 레지스터와 메모리 위치들의 상호작용 실행 과정

 

1) 프로그램 로딩 : 프로그램이 메모리에 로드된다.

2) 프로그램 카운터(PC) : 프로그램이 시작되면 PC가 초기화되고 프로그램의 첫 번째 명령어의 주소로 설정된다.

3) 명령어 주소 레지스터(MAR) : 첫 번째 명령어의 주소를 읽어 들이기 위해 주소 버스로 해당 주소를 내보내야 한다. 이를 위해 메모리 주소 레지스터에 해당 주소가 저장된다.

4) 메모리 읽기 제어 신호와 메모리 주소 레지스터 값이 각각 제어 버스와 주소 버스를 통해 메모리로 보내진다.

5) 해당 주소에 저장된 값은 데이터 버스를 통해 메모리 버퍼 레지스터로 전달되고 프로그램 카운터는 증가되어 다음 명령어를 읽어 들일 준비를 한다.

6) 메모리 버퍼 레지스터에 저장된 값은 명령어 레지스터로 이동한다.

7) 제어장치는 명령어 레지스터의 명령어를 해석하고 제어 신호를 발생시킨다.


프로그램 카운터가 증가하지 않고 다른 값으로 업데이트되는 경우 프로그램의 흐름이 순차적으로 증가하지 않는 경우가 발생한다.

1) 점프 및 분기 명령어 

JUMP, CONDITIONAL JUMP와 같은 명령어는 프로그램 카운터를 특정 값으로 변경하여 프로그램의 실행 흐름을 해당 주소로 이동시킨다. 이로 인해 순차적인 명령어의 실행이 중단된다.

2) 함수 호출과 반환

CALL 명령어는 프로그램을 특정 함수로 점프시키고 RET명령어는 함수의 실행이 끝난 후 돌아갈 주소를 프로그램 카운터에 저장한다. 이로 인해 함수 호출 및 반환 과정에서 프로그램 흐름이 중단된다.

3) 인터럽트

예외 상황이나 외부 이벤트가 발생했을 때 현재 실행 중인 프로그램을 중단하고 특정 인터럽트 서비스 루틴으로 점프시키는데 이때 프로그램 카운터가 인터럽트 서비스 루틴의 주소로 변경된다.


05 플래그 레지스터

기능 : ALU 연산 결과에 대한 상태를 저장하는데 사용된다.

활용 : 프로그램이 실행 중인 상태에 대한 정보를 저장하고 이를 기반으로 다양한 제어결정을 할 수 있다. 


06 범용 레지스터

기능 : 다양한 목적으로 사용되는 일반적인 목적의 레지스터이다. 메모리 버퍼 레지스터는 데이터 버스로 주고 받을 값만 저장하고 메모리 주소 레지스터는 주소 버스로 내보낼 주소값만 저장하지만 범용 레지스터는 데이터와 주소를 모두 저장할 수 있다.

활용 : 프로그램이 수행하는 연산에 따라 범용 레지스터는 값이 변경되며 이는 계산 과정에서의 임시 저장소로 활용된다.


특정 레지스터를 이용한 주소 지정 방식

1. 스택 주소 지정 방식

스택과 스택 포인터를 이용한 주소 지정방식이다.

01 스택 포인터(Stack Pointer)

스택의 꼭대기를 가리키는 레지스터로 스택에 마지막으로 저장한 값의 위치를 저장한다. 스택에 데이터를 푸시하거나 팝할 때마다 스택 포인터가 갱신된다.

02 스택 영역

스택은 메모리 안에 있고 사용할 영역이 정해져있다. 프로그램이 함수를 호출하거나 로컬 변수를 사용할 때 스택에 데이터가 저장된다. 스택은 메모리의 높은 주소에서 낮은 주소 방향으로 커지는 방식으로 할당된다. 

03 스택 포인터

기능 : 스택 메모리의 현재 위치를 가리키는 레지스터이다. 

활용 : 함수 호출 시 함수의 로컬 변수와 복귀 주소 등이 스택에 저장되고 스택 포인터가 이를 가리키게 된다. 스택 포인터의 증감은 스택에 데이터를 푸시하거나 팝하는데 사용된다.


변위 주소 지정 방식(displacement addressing mode)

오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식이다.

 

변위 주소 지장 방식을 사용하면 명령어는 다음 그림과 같이 이루어져있다.

이때 변위 주소 지정 방식은 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라 상대 주소 지정 방식, 베이스 레지스터 주소 지정방식등으로 나뉜다.


01 상대 주소 지정 방식(relative addressing mode)

오퍼랜드와 프로그램 카운터(현재 실행 중인 명령어의 주소)의 값을 더하여 유효주소를 얻는 방식이다. 

프로그램이 특정 조건을 만족할 때 분기해야 하는 경우 상대 주소를 사용하여 조건에 따라 다양한 위치로 분기할 수 있다.

분기(branch)란?

프로그램의 실행 흐름을 변경하여 다른 부분으로 이동하는 것일 의미한다. 이는 조건에 따라 조건이 참이 되면 다른 명령어 또는 코드 블록으르 이동하거나 특정 위치로 이동하는 명령어 등을 포함한다.

분기 명령어는 프로그램의 다양한 상황에 따라 다른 명령어들을 실해아도록 허용하며 이는 프로그램이 특정 조건이나 상황에 따라 다르게 동작할 수 있게 해준다.

오퍼랜드가 음수인 경우

만약 오퍼랜드가 -3이었다면 CPU는 읽어 들이기로 한 명령어로부터 세번째 이전 번지로 접근한다. 이는 분기 명령어에서 세 칸 이전으로 이동하여 실행하려는 명령어의 주소를 찾아 간다.

오퍼랜드가 양수인 경우

만약 오퍼랜드가 3이었다면 CPU가 읽어 들이기로 했던 명령어의 세번째 이후 번지로 접근한다. 즉 실행하려는 명령어에서 세 칸 건너뛴 번지를 실행한다.


02 베이스 레지스터 주소 지정 방식(base-register addressing mode)

오퍼랜드와 베이스 레지스터의 값을 거하여 유효주소를 얻는 방식이다.

베이스 레지스터 주소 지정 방식은 베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는 주소에 접근할 것인지를 연산하여 유효 주소를 얻어내는 방식이다.

 

 

 

 

 

 

 

 

참고 :  본 내용은개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제강의를 수강하여 작성하였습니다. 

https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard

 

 

 

 

 

 

반응형

댓글