[컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터

2026. 1. 20. 00:39·CS/컴퓨터구조

https://dev-dx2d2y-log.tistory.com/188

 

[컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치

https://dev-dx2d2y-log.tistory.com/185 [컴퓨터구조] 혼공컴구 독서 #2 - 명령어혼공컴구 책을 쭉 보니까 책 앞부분이 데이터와 명령어를 다루고 있다. 그런데 데이터는 이진수로 숫자와 문자를 표기하는

dev-dx2d2y-log.tistory.com

컴퓨터의 4개의 핵심부품 중 하나인 CPU 중에서 저번에 ALU와 제어장치에 대해서 배워봤다. 이번에는 레지스터에 대해서 알아보도록한다.


레지스터

CPU는 레지스터와 ALU, 제어장치로 이루어져있으며, 프로그램의 명령어와 데이터는 실행 전후로 레지스터에 저장된다. 즉, CPU 내부의 저장공간이다.


주요 레지스터

레지스터도 이름, 크기, 종류가 사용목적에 따라서, 그리고 제조사에 따라서도 매우 다양한 편이다. 따라서 몇 가지 주요 레지스터만 알아보도록하면,


프로그램 카운터 레지스터

PC Register: Program Counter Register

다음 명령어의 메모리 주소를 저장한다.

 

https://dev-dx2d2y-log.tistory.com/138

 

[JVM] JVM 밑바닥까지 파헤치기 독서 #1 - 자바 런타임 메모리 영역

C와 C++은 객체 (C에는 객체가 없지만)의 생성, 관리, 삭제까지 모두 관리할 책임을 가지지만, 자바에서는 JVM이 대체적으로 이 역할을 수행한다. JVM에 대해서 배우면서 가장 먼저 자바 메모리 영역

dev-dx2d2y-log.tistory.com

JVM 내부에 PC레지스터란 메모리 공간이 있는데, 같은 역할을 수행한다. 정확히는 JVM 내부의 PC레지스터가 컴퓨터의 PC레지스터 기능을 차용한 것이지만


명령어 레지스터

IR: Instruction Register

PC 레지스터에서 읽어온 명령어의 주소에 저장된 명령어를 저장한다. 즉, 해석할 명령어를 저장한다.


메모리 주소 레지스터

MAR: Memory Address Register

CPU가 메모리에 접근해야할 때, 메모리 주소를 저장하는 역할을 한다. 여기에 메모리 주소를 저장했다가 주소 버스에 태워서 보내게된다.


메모리 버퍼 레지스터

MBR: Memory Buffer Register

메모리 데이터 레지스터 (MDR: Memory Data Register)라고도 한다. 메모리와 주고받을 값을 저장한다. 즉, 메모리에게 전달할 값 또는 메모리에서 전달받은 값이 이곳에 저장된다.


플래그 레지스터

https://dev-dx2d2y-log.tistory.com/188

 

[컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치

https://dev-dx2d2y-log.tistory.com/185 [컴퓨터구조] 혼공컴구 독서 #2 - 명령어혼공컴구 책을 쭉 보니까 책 앞부분이 데이터와 명령어를 다루고 있다. 그런데 데이터는 이진수로 숫자와 문자를 표기하는

dev-dx2d2y-log.tistory.com

ALU할 때 같이 다룬 적이 있다. 연산결과에 대한 정보나 연산 시 확인해야하는 정보들을 플래그 레지스터에 담아두고 확인한다.


범용 레지스터

General Purpost Register

다양한 상황에서 범용적으로 사용할 수 있는 레지스터. 위의 레지스터들은 반드시 특정 목적으로만 사용해야하지만, 범용 레지스터는 특별한 목적 없이도 자유롭게 사용할 수 있다. 현대의 많은 CPU들은 이 범용 레지스터를 가지고 있다.


레지스터 주소 저장 플로우

그렇다면 CPU가 연산을 수행할 때 보통 어떻게 레지스터를 사용할까? 

 

1

프로그램이 실행되면 프로그램을 실행하기 위한 명령어가 저장된 메모리 주소를 PC레지스터에 저장한다.

일반 프로그램을 실행시키면 main 함수와 같은 시작지점이 저장된 위치가 있는데, 그 값을 PC레지스터에 입력하고, OS가 부팅되는 경우에는 PC레지스터가 기본설정된 메모리 주소를 저장하도록하며, 그 주소에 OS부팅 관련된 명령어들이 있다.

 

2

PC레지스터에는 주소버스가 없기 때문에 메모리에 접근하기 위해서는 메모리 주소 레지스터에게 이를 넘겨야한다. 그래서 메모리 주소 레지스터에 PC레지스터에 저장된 값을 저장한다.

 

3

제어장치는 메모리 읽기 제어신호를 발송한다. 제어신호는 제어버스를, 메모리 주소는 주소버스를 타서 메모리로 이동한다.

 

4

메모리에서는 주소와 제어신호를 보고 보낼 데이터를 데이터 버스에 담아서 CPU로 보낸다. CPU는 이를 메모리 버퍼 레지스터에 보관한다.

 

5

PC레지스터의 값을 1 올린다.

일반적으로 명령어는 연속적으로 저장되기 때문에 PC레지스터는 초기값이 세팅되면 단순히 그 값을 1씩 올리며 프로그램을 실행한다. 다만 만약 JUMP, CONDITIONAL JUMP, CALL과 같이 아예 다른 명령어 주소에 다음 명령어가 저장되어 있다면, PC레지스터에는 변경된 주소가 저장된다.

 

6

메모리 버퍼 레지스터에 저장된 값은 명령어 레지스터로 이동해서 명령어를 해석하고 제어 신호를 발생시킨다.

 

이후 과정에서는 5번째 단계에서 바뀐 PC레지스터에 따라 명령어를 읽고 해석하고, 제어신호를 보내는 과정을 반복한다.


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

https://dev-dx2d2y-log.tistory.com/185

 

[컴퓨터구조] 혼공컴구 독서 #2 - 명령어

혼공컴구 책을 쭉 보니까 책 앞부분이 데이터와 명령어를 다루고 있다. 그런데 데이터는 이진수로 숫자와 문자를 표기하는 방법에 대해서 나타내고 있길래.. 이건 패스 이 부분은 https://dev-dx2d2y-

dev-dx2d2y-log.tistory.com

저번에 주소지정방식에 대해서 다루다가 레지스터 주소 지정방식은 레지스터 주소 지정 방식과 레지스터 간접 주소 지정 방식만 다루고 넘어갔다. 이번에는 레지스터에 값을 저장하는 방법에 대해서 자세히 알아볼 것이다.


스택 주소 지정 방식

메모리의 특정 공간은 스택과도 같이 사용할 수 있는 영역이 있다. (자료구조의 그 스택) 이를 스택 영역이라고 칭한다. 스택처럼 사용하도록 암묵적으로 약속된 공간인데, 이 스택과 스택을 가리키는 스택 포인터를 통해서 주소를 지정할 수 있다.

 

스택 포인터는 스택 영역에서 맨 꼭대기의 주소를 가리킨다. 즉, 가장 마지막으로 값이 저장된 메모리 주소를 가리킨다. 스택은 주로 JUMP 등의 명령어를 사용했을 때 돌아갈 명령어 주소를 넣어두거나, 임시로 데이터를 넣어둘 때 사용한다. LIFO


변위 주소 지정 방식

displacement addressing mode

명령어는 연산 코드와 오퍼랜드가 있다고했다. 오퍼랜드에는 주로 메모리주소가 저장된다고했고.

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

 

변위 주소 지정 방식을 사용하는 명령어는 이렇게 명령어를 세 가지로 나눌 수 있다. 연산 코드에 있는 값을 수행해야하며, 데이터의 주소는 레지스터에 명시된 레지스터의 값과 오퍼랜드의 주소를 더한 곳에 있는 데이터를 가져오라는 뜻.


상대 주소 지정 방식

Relative addressing mode

변위 주소 지정 방식 중 하나인 상대 주소 지정 방식에서는 레지스터가 프로그램 카운터 레지스터가 사용된다. 만약 상대 주소 지정 방식에 오퍼랜드가 n이라면, 데이터는 현재 명령어를 읽고 있는 주소에 n을 더한 곳에 메모리 주소로 가서 값을 읽어온다.

 

이러한 방식은 if문과 유사하게 조건분기로 모든 코드를 실행하는 것이 아니라 특정 주소의 코드를 실행시킬 때 사용한다.


베이스 레지스터 주소 지정 방식

Base-register addressing mode

베이스 레지스터란 '기준 주소'를 의미한다. 이는 프로그램이 저장된 곳의 제일 첫 번째 메모리 주소, 즉 메모리 상에서 프로그램이 시작되는 부분을 의미한다. 오퍼랜드는 '기준 주소로부터 얼마나 떨어졌는가?'를 나타낸다. 지역변수 등에서도 사용하고, 가장 대표적으로 만나볼 수 있는 예시가 배열이다.

'CS > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] OOO, OoOE, 토마슬로 알고리즘을 통한 비순차적 명령어 처리 + 혼공컴구 독서 #6 - CPU 성능향상  (1) 2026.01.25
[컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트  (0) 2026.01.23
[컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치  (0) 2026.01.17
[컴퓨터구조] 혼공컴구 독서 #2 - 명령어  (0) 2026.01.16
[컴퓨터구조] 혼공컴구 독서 #1 - 컴퓨터구조 개관 및 기초  (1) 2026.01.14
'CS/컴퓨터구조' 카테고리의 다른 글
  • [컴퓨터구조] OOO, OoOE, 토마슬로 알고리즘을 통한 비순차적 명령어 처리 + 혼공컴구 독서 #6 - CPU 성능향상
  • [컴퓨터구조] 혼공컴구 독서 #5 - 명령어 사이클과 인터럽트
  • [컴퓨터구조] 혼공컴구 독서 #3 - CPU - ALU, 플래그, 제어장치
  • [컴퓨터구조] 혼공컴구 독서 #2 - 명령어
Radiata
Radiata
개발을 합니다.
  • Radiata
    DDD
    Radiata
  • 전체
    오늘
    어제
    • 분류 전체보기 (211) N
      • 신년사 (3)
        • 2025년 (2)
        • 2026년 (1)
      • CS (59) N
        • JVM (12)
        • 백엔드 (20) N
        • 언어구현 (1)
        • 객체지향 (1)
        • 논리회로 (5)
        • 컴퓨터구조 (9)
        • 데이터베이스 (1)
        • 컴퓨터 네트워크 (10)
      • 언어공부 (64)
        • Java | Kotlin (48)
        • JavaScript | TypeScript (9)
        • C | C++ (6)
      • 개인 프로젝트 (11)
        • [2025] Happy2SendingMails (3)
        • [2026] 골든리포트! (8)
        • [2026] 순수자바로 개발하기 (0)
        • 기타 이것저것 (0)
      • 팀 프로젝트 (29)
        • [2025][GDG]홍대 맛집 아카이빙 프로젝트 (29)
      • 알고리즘 (13)
        • 백준풀이기록 (11)
      • 놀이터 (0)
      • 에러 수정일지 (2)
      • 고찰 (24)
        • CEOS 23기 회고록 (2)
  • 블로그 메뉴

    • CS
    • 언어공부
    • 개인 프로젝트
    • 팀 프로젝트
    • 알고리즘
    • 고찰
    • 신년사
    • 컬러잇 개발블로그
  • 링크

    • 컬러잇 개발블로그
  • 공지사항

  • 인기 글

  • 태그

    144
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Radiata
[컴퓨터구조] 혼공컴구 독서 #4 - CPU 레지스터
상단으로

티스토리툴바