주소 지정 방식
주소 지정 방식은 명령어가 피연산자가 어디에 위치하는지(레지스터에 있는지, 즉시 값으로 내장되어 있는지, 또는 레지스터와 오프셋으로부터 계산된 주소의 메모리에 있는지)를 지정하는 규칙입니다.
Definition
주소 지정 방식은 피연산자의 위치를 결정하기 위해 명령어가 지정하는 방법으로, 레지스터나 명령어 자체에 직접 저장된 값부터 베이스 레지스터, 인덱스 레지스터 및 변위로부터 계산된 주소에 이르기까지 다양합니다.
Scope
이 주제는 피연산자가 이름 지정되고 위치하는 방식(즉시, 레지스터, 레지스터 간접, 베이스-변위, 인덱스, PC 상대 및 더 복잡한 계산 방식)을 다룹니다. 주소 지정 방식이 코드 크기, 명령어 수 및 하드웨어 복잡성에 미치는 영향을 다룹니다. 명령어 인코딩 방식(명령어 형식 및 인코딩)과 시스템의 가상-물리 변환(가상 메모리 및 페이징)은 제외합니다.
Core questions
- 각 주소 지정 방식은 피연산자의 유효 주소 또는 값을 어떻게 계산합니까?
- 실제 프로그램에서 가장 자주 사용되는 주소 지정 방식은 무엇이며 그 이유는 무엇입니까?
- 더 풍부한 주소 지정 방식이 하드웨어 및 디코딩 복잡성을 대가로 명령어 수를 어떻게 줄입니까?
- 로드-스토어 아키텍처는 메모리 접근을 몇 가지 간단한 방식으로 제한하는 이유는 무엇입니까?
Key concepts
- 즉시 주소 지정
- 레지스터 주소 지정
- 레지스터 간접 주소 지정
- 베이스-변위
- 인덱스 주소 지정
- PC 상대 주소 지정
- 유효 주소 계산
- 로드-스토어 제한
Mechanisms
각 주소 지정 방식은 프로세서가 피연산자를 도출하는 방법을 정의합니다. 즉시 피연산자는 명령어에 인코딩됩니다. 레지스터 피연산자는 레지스터 파일에서 읽습니다. 메모리 피연산자는 베이스 레지스터, 선택적 스케일드 인덱스 및 변위를 더하여 유효 주소를 계산합니다. PC 상대 주소 지정은 프로그램 카운터에 상대적인 주소를 형성하여 위치 독립적인 코드와 분기 대상을 지원합니다.
Clinical relevance
주소 지정 방식은 컴파일러가 코드를 생성하는 방식을 형성합니다. 베이스-변위 방식은 구조체 필드와 스택 변수에 자연스럽게 매핑되고, 인덱스 방식은 배열 접근에, PC 상대 주소 지정은 위치 독립적인 실행 파일과 공유 라이브러리에 사용됩니다. RISC 로드-스토어 설계는 파이프라이닝을 용이하게 하기 위해 메모리 주소 지정을 의도적으로 단순하게 유지하는 반면, CISC 머신은 코드 밀도를 위해 더 풍부한 방식을 제공합니다.
History
초기 및 CISC 아키텍처는 메모리 간접 및 자동 증가 형식을 포함하여 많은 정교한 주소 지정 방식을 축적했습니다. 명령어 사용에 대한 경험적 연구에 따르면 소수의 간단한 방식이 대부분의 접근을 차지한다는 것이 밝혀졌으며, 이는 RISC가 소수의 방식만 지원하고 메모리 접근을 로드 및 스토어 명령어로 제한하기로 결정한 동기가 되었습니다.
Key figures
- John L. Hennessy
- David A. Patterson
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- RISC 아키텍처가 주소 지정 방식을 적게 지원하는 이유는 무엇입니까?
- 연구에 따르면 프로그램은 압도적으로 몇 가지 간단한 방식을 사용합니다. 메모리 접근을 레지스터 간접 및 베이스-변위로 제한하면 파이프라인이 단순하고 효과적이며 유효 주소 계산이 빨라지는 동시에 컴파일러는 이러한 기본 요소로부터 더 풍부한 접근 패턴을 합성합니다.
- PC 상대 주소 지정은 무엇에 사용됩니까?
- PC 상대 주소 지정은 프로그램 카운터로부터의 오프셋으로 주소를 계산합니다. 이는 분기 및 점프 대상과 인접 데이터 접근에 사용되며, 메모리에 로드되는 위치에 관계없이 올바르게 실행되는 위치 독립적인 코드를 가능하게 합니다.