📱레지스터📱
레지스터는 'CPU 내부의' 작은 임시저장장치이다.
프로그램 속 명령어와 데이터는 실행 전/후로 레지스터에 저장된다.
레지스터의 종류는 다양하며 각기 역할도 다르다.
레지스터의 종류는 사실 CPU의 종류마다 다르기도 하다.
1. 프로그램 카운터
- 메모리에서 가져올(읽어 드릴) 명령어의 주소 (Instruction Pointer _명령어 포인터)라고 부르기도 함.
2. 명령어 레지스터
- 해석할 명령어(1번에서 읽어 들인 명령어) _ 해석은 제어장치가 함
3. 메모리 주소 레지스터
- 메모리의 주소를 저장함. (CPU가 주소 버스를 이용해야 하는 경우_ 시스템버스(데이터,제어,주소)
즉 CPU가 읽으려는 메모리의 주소를 주소 버스로 보낼 때 거치는 레지스터
4. 메모리 버퍼 레지스터
- 메모리와 주고받을 값(데이터와 명령어) _CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터
메모리 버퍼 레지스터에 값이 들어오면, 프로그램 카운터는 1 증가함.
-> 다음 코드를 읽기 위해! 이것이 바로 프로그램을 순차적으로 실행하는 원리.
but 항상 1씩 증가하는 것은 아님(순차적 실행 흐름이 끊기는 경우)
- 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시 (JUMP, CONDITIONAL JUMP, CALL, RETURN 등)
- 인터럽트 발생 시 (하드웨어, 소프트웨어)
참고
CPU 명령어 중 "CALL"은 프로그램 실행 중에 하위 프로그램 또는 서브루틴(subroutine)을 호출하는 역할을 하는 명령어입니다. 이것은 프로그램의 구조를 조직화하고 재사용 가능한 코드를 구현하는 데 도움이 되는 중요한 개념입니다. "CALL" 명령어를 사용하여 서브루틴을 호출하면 현재 실행 중인 코드의 흐름을 일시적으로 멈추고 호출된 서브루틴의 코드로 이동합니다. 서브루틴이 실행을 완료하면 다시 호출한 위치로 돌아가게 됩니다.
일반적으로 "CALL" 명령어는 다음과 같은 단계로 이루어집니다:
- 호출한 위치에서 현재 실행 중인 코드의 상태를 저장합니다. 주로 스택이나 레지스터에 저장됩니다.
- 호출하려는 서브루틴의 시작 주소로 점프합니다.
- 서브루틴이 실행됩니다.
- 서브루틴 실행이 완료되면, 저장된 상태를 복원하고 호출한 위치로 돌아갑니다.
5. 플래그 레지스터
- 연산 결과 or CPU 상태에 대한 '부가적인 정보'
6. 범용 레지스터
- 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터 (보통 여러개 있음)
7. 스택 포인터
스택 주소 지정 방식에 사용됨. (스택과 스택 포인터를 이용하는 주소 지정 방식)
- 스택의 꼭대기를 가리키는 레지스터(스택이 어디까지 차 있는지 표시)
8. 베이스 레지스터
변위 주소 지정 방식(오퍼랜드 필드의 값(변위)과 특정 레지스터의 값(from 프로그램 카운터 or 베이스 레지스터)
을 더해서 유효 주소 얻는 방식
'기준 주소를 저장한다.'
* 상대 주소 지정 방식
* 베이스 레지스터 주소 지정 방식
'기준 주소'로 부터!
학습 출처: https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
8. CPU 설계 기법(클럭, 코어, 스레드) (0) | 2023.08.16 |
---|---|
7. 명령어 사이클과 인터럽트 (0) | 2023.08.13 |
5. ALU와 제어장치 (0) | 2023.08.10 |
4. 명령어의 구조 (0) | 2023.07.16 |
3. 소스코드/명령어 (0) | 2023.07.11 |