*해당 글은 '혼자 공부하는 컴퓨터구조 + 운영체제(강민철 지음)'을 참고하여 작성되었습니다.
*구체적인 예시와 함께 더 자세히 공부하고 싶으신 분들은 해당 책을 읽어보시기를 추천드립니다.
지난 시간에 CPU의 레지스터에 대해 배웠습니다.
대표적인 8가지 레지스터 중 6개를 간단히 알아봤는데요, 오늘은 나머지 2개에 대해서 같이 알아보겠습니다.
오늘 배울 2가지 레지스터는 주소 지정 방식과 관련이 있습니다.
지난 시간에 배운 프로그램 카운터와 오늘 배울 스택 포인터, 베이스 레지스터는 주소 지정에 사용될 수 있는 특별한 레지스터입니다.
스택 포인터는 스택 주소 지정 방식이라는 주소 지정 방식에 사용되고,
프로그램 카운터와 베이스 레지스터는 변위 주소 지정 방식이라는 주소 지정 방식에 사용됩니다.
스택 주소 지정 방식과 변위 주소 지정 방식은 처음 들으시죠?
이번 시간을 같이 한 번 알아보겠습니다.
1. 스택 주소 지정 방식
스택 주소 지정 방식이란, 스택과 스택 포인터를 이용한 주소 지정 방식입니다.
먼저 스택이 무엇인지 알아야겠죠?
스택(Stack)이란, 한쪽 끝이 막혀 있는 통과 같은 저장 공간입니다.
우리가 어떤 통에 물건을 하나씩 차곡차곡 넣었을 때, 물건을 뺄 때는 위에서부터 빼야 겠죠?
즉, 마지막에 넣은 물건을 가장 먼저 뺄 수 있는 구조입니다. (후입선출)
정리해보면, 스택은 나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식이라 할 수 있습니다.
스택 포인터(Stack Pointer)란, 스택의 꼭대기를 가리키는 레지스터입니다.
스택에 마지막으로 저장된 값의 위치를 저장하는 것이죠.
예를 들어, 스택에 데이터가 들어오거나 나가면, 스택 포인터도 그만큼 변하게 되겠죠? 스택 꼭대기의 위치가 달라지니까요!
그렇다면, 이 스택이라는 것은 어디에 있는 걸까요?
스택은 메모리 안에 있습니다.
메모리 안에 스택처럼 사용할 영역이 정해져있는데, 이를 스택 영역이라고 합니다.
2. 변위 주소 지정 방식
변위 주소 지정 방식(Displacement Addressing Mode)이란,
오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 유효 주소를 얻는 주소 지정 방식입니다.
변위 주소 지정 방식을 사용하는 명령어에는
연산 코드와 오퍼랜드 필드뿐만 아니라 특정 레지스터를 가리키는 레지스터 필드가 있겠죠?
변위 주소 지정 방식은 오퍼랜드 필드의 값과 어떤 레지스터의 값를 더하냐에 따라,
상대 주소 지정 방식과 베이스 레지스터 주소 지정 방식으로 나뉩니다.
먼저, 상대 주소 지정 방식부터 알아보겠습니다.
상대 주소 지정 방식(Relative Addressing Mode)이란, 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식입니다.
프로그램 카운터에는 읽어 들일 명령어의 주소가 저장되어 있죠?
그 주소에 오퍼랜드 값을 더한 유효 주소로 접근하는 것입니다.
예를 들어 오퍼랜드 값이 -5라면, 프로그램 카운터에 있는 주소에서 -5 위치에 있는 명령어를 실행하게 되겠죠?
만약 오퍼랜드 값이 5라면, 프로그램 카운터에 있는 주소에서 +5 위치에 있는 명령어를 실행하게 될 것입니다.
베이스 레지스터 주소 지정 방식(Base-Register Addressing Mode)이란,
오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식입니다.
여기서 베이스 레지스터는 기준 주소를 가집니다.
그리고 오퍼랜드는 기준 주소로부터 떨어진 거리를 의미합니다.
즉, 베이스 레지스터 주소 지정 방식은,
베이스 레지스터에 있는 기준 주소로부터 오퍼랜드 값 만큼 떨어져있는 유효 주소에 접근하는 주소 지정 방식입니다.
예를 들어 베이스 레지스터에 400, 오퍼랜드가 40이 저장되어 있다면, 440번지에 접근해야겠죠?
나머지 2개의 레지스터와 이와 관련된 주소 지정 방식들에 대해 알아보았습니다.
이렇게 CPU의 3가지 핵심 부품에 대해서 간단히 알아보았는데요, 조금 어려우셨나요?
반복해서 공부해보신다면 분명 잘 하실 수 있을 것이라 생각합니다!
다음 시간에는 명령어 사이클과 인터럽트에 대해서 배워보도록 하겠습니다.
'컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조][기초] 인터럽트 - 동기 / 비동기(하드웨어) 인터럽트 (0) | 2025.03.26 |
---|---|
[컴퓨터구조][기초] 명령어 사이클 (3) | 2025.03.25 |
[컴퓨터구조][기초] CPU - 레지스터 (0) | 2025.03.17 |
[컴퓨터구조][기초] CPU - 제어장치 (2) | 2025.03.14 |
[컴퓨터구조][기초] CPU - ALU (산술/논리 연산 장치) (1) | 2025.03.13 |