레지스터는 CPU 내부의 작은 임시저장장치.
CPU 내부에는 다양한 종류의 레지스터가 있고, 각각의 역할이 있다
(CPU마다 레지스터 종류와 이름이 다르기에, 일단 공통적인 것들을 일반화해서 알아두자)
레지스터 1~4번을 통한 CPU와 메모리의 동작 방식에 대해 이해해보자
(프로그램 카운터, 메모리 주소 레지스터, 메모리 버퍼 레지스터, 명령어 레지스터)
메모리에 실행할 프로그램이 저장되어 있다.
각각의 명령어와 데이터는 1000번지~1500번지에 있다고 가정하자.
1000번지에 있는 명령어(1101)부터 실행한다면 다음 과정을 거친다
프로그램 카운터: 1000번지가 저장된다.
프로그램 카운터 -> 메모리 주소 레지스터: 메모리 주소(1000번지)를 복사한다
주소 버스에다가 읽고자하는 메모리 주소(1000번지)를 쏴줘야 하기 때문이다
제어장치 → 제어 버스 → 메모리: 메모리 읽기 신호 를 쏴준다
메모리 주소 레지스터 -> 주소 버스 -> 메모리 : 읽고싶은 메모리 주소를 쏴준다
이들을 더하면, ‘몇 번지의 메모리를 읽어라’ 라는 신호가 된다
메모리 → 데이터 버스 -> 메모리 버퍼 레지스터: 1000번지에 저장된 데이터(1101)를 전달한다.
프로그램 카운터 : 다음으로 실행할 주소로 바뀐다. (1 증가)
메모리 버퍼 레지스터 -> 명령어 레지스터: 갖고온 명령어(1101)를 복사한다 명령어를 해석하기 위해 명령어 레지스터(해석 대기장..)로 보낸다
앞서 프로그램 카운터에 1 증가된 주소가 저장되었다 → 자동으로 다음 작업을 한다 → .. 반복
순차적인 실행 흐름이 끊기는 경우
1. 스택 주소 지정 방식 (스택포인터 이용)
예를 들어, 스택에 4번지까지 채워져 있다면 스택 포인터는 4번지를 가리키게 된다.
스택은 메모리 안에 있다. 정확히 말하면, 메모리 안에 스택 영역이 따로 지정되어 있다.
2. 변위 주소지정 방식
변위 주소지정 방식은 크게 두 가지이다.
1) 상대 주소지정 방식
- 프로그램 카운터를 이용한다
- 오퍼랜드 필드의 값(변위) + 프로그램 카운터 값 = 유효 주소
2) 베이스 레지스터 주소지정 방식
- 베이스 레지스터를 이용한다. 베이스 레지스터는 기준 주소 역할을 한다.
- 오퍼랜드 필드의 값(변위) + 베이스 레지스터 값 = 유효 주소
프로그램 카운터(명령어 포인터) or 베이스 레지스터에 저장된 주소를 offset이라고 한다
상대 주소지정 방식 vs 베이스 레지스터 주소지정 방식 (chatGPT)
CS:APP | Chapter 3 | (1) 프로그램의 기계수준 표현 (0) | 2023.10.31 |
---|---|
CS:APP | Chapter 1 | 컴퓨터 시스템 overview (4) | 2023.10.26 |
[혼공컴운] Ch4. CPU의 작동 원리 (ALU, 제어장치) (0) | 2023.10.04 |
[혼공컴운] Ch3. 명령어 주소 지정 방식 (0) | 2023.09.30 |
[혼공컴운] Ch3. 명령어, 컴파일 (0) | 2023.09.30 |