명령어 세트 : 주소 지정 방식과 형식
주소 지정 방식(Addressing Mode)
즉시(Immediate)
- 명령어가 operand 포함
직접(Direct)
- 명령어 주소 = operand 위치
간접(Indirect)
- 명령어 주소 = operand 위치를 가르키는 주소
레지스터(Registor)
- 명령어의 주소 = 레지스터 번호
레지스터 간접(Registor Indirect)
- 명령어의 주소 -> 레지스터 번호 -> operand 주소
변위(Displacement)
- 여러 개의 주소 결합(덧셈)을 통한 상대주소 계산
스택(Stack)
- CPU가 지정하는 자동 증가 주소(암묵적임)
주소 지정 방식들
기본적인 주소지정 방식들
즉시 주소지정
- 가장 간단한 형태의 주소 지정
- 오퍼랜드 = A (주소필드)
- 이 방식은
상수(constant)
를 정의하여 사용하거나, 변수의 초기 값을 세트하는데 사용한다.- 일반적으로 수는 2의 보수 형태로 저장한다.
- 오퍼랜드 필드의 맨 좌측 비트(MSB)가 부호 비트로 사용된다.
- 장점
- 오퍼랜드를 인출하거나 기억장치를 참조할 필요가 없어서, 명령어 사이클에서 하나의 기억장치 사이클 또는 캐시 사이클을 줄일 수 있다.
- 단점
- 수의 크기가 주소필드의 크기로 제한된다.
$Instruction(word) = opcode + Address \ Field$
즉시 주소 지정
- 명령어의 주소 필드가 오퍼랜드의 유효주소(EA)를 가지고 있다.
- $EA = A$
- $EA = operand$
- 초기의 컴퓨터들에게 널리 사용되었다.
- 한번의 기억장치 참조만 필요하며, 다른 특별한 계산은 필요 없다.
- 주소 공간이 제한되어 있다.
간접 주소 지정
- 주소 필드는 기억장치에 저장된 단어의 주소를 가리키도록 하고, 그 기억장치에 오퍼랜드의 주소 전체가 저장되어 있도록 하는 방식
- $EA = (A)$
- 괄호는 그 내용을 의미하는 것으로 해석
- 장점
- 단어 길이가 N이면, $2^{n}$ 개의 주소 공간을 가질 수 있다.
- 단점
- 명령어 실행 과정에서 두 번의 기억장치 참조들이 필요하다.
- 두 번째는 그 주소가 지정하는 위치로부터 오퍼랜드를 가져오기 위한 것이다.
- 간접 주소 지정의 변형으로 다단계(multilevel) 또는 연속(cascaded) 간접 주소 지정 방식
- $EA = (...(A)...)$
- 단점은 한 개의 오퍼랜드를 인출하기 위해서 여러 번의 기억장치 참조들이 필요하다.
레지스터 주소 지정
- 주소 필드가 주 기억장치 주소가 아닌 레지스터(번호)를 가리킨다.
- $EA = R$
- $operand -> registor$
- 장점
- 명령어에서 주소 필드가 작아도 된다.
- 기억장치 액세스가 필요없다.
- 단점
- 주소 공간이 매우 제한된다.
만약 CPU 내의 Registor 수가 적다면,
장점은 번호에 사용되는 비트 수가 줄어든다.
단점은 공간이 작아진다.
- 주소 공간이 매우 제한된다.
레지스터 간접 주소 지정
- 간접 주소 지정과 유사하나, 주소 필드가 기억장치와 레지스터 중에서 어느 것을 지정하냐가 다르다.
- $EA =(R)$
- 주소 필드에 의해 주소 공간이 제한되는 문제점은 그 필드가 주소를 가지고 있는 단어의 위치를 가르킴으로써, 해결한다.
- 간접 주소 지정 방식보다 기억장치 액세스 횟수가 한 번 더 작다.
Memory Access 횟수 단축
Address Space ⬆ = word size
변위 주소 지정
- 직접 주소 지정과 레지스터 간접 주소 지정의 기능들을 조합
- $EA = A + (R)$
- 변위 주소 지정을 사용하는 명령어는 두 개의 주소필드들을 가지며, 그들 중에서 적어도 한 필드는 실제로 명시(explicit)된다.
- $A + (R)$ : 명시 or 묵시 = 전용 레지스터
- 하나의 주소 필드에 포함되어있는 값(A)는 직접 사용한다.
- 다른 주소 필드 또는 연산 코드에 따른 묵시적 참조는 레지스터를 지정하며, 그 레지스터의 내용이 A와 더해져서 유효 주소를 생성한다.
- 가장 널리 사용되고 있는 세 가지 변위 주소 지정 방식들
상대 주소 지정(Relative Addressing)
베이스-레지스터 주소 지정(Base-Registor Addressing)
인덱싱(Indexing)
상대 주소 지정
- 묵시적으로 참조되는 레지스터가 프로그램 카운터
- 다음 명령어 주소가 주소 필드에 더해진다.
- 전형적으로, 이 연산을 위하여 주소 필드는 2의 보수로 취급된다.
- 따라서, 유효주소는 명령어의 주소를 기준으로한 상대적인 변위이다.
- 지역성의 개념을 이용한다.
- 대부분의 기역장치 참조들이 현재 실행되고 있는 명령어에 인접해있다면, 상대 주소 지정 방식을 이용함으로써 명령어의 주소 비트 절약 가능
$EA = A + (R)$
여기서 $(R)$ 은 PC(현재 명령어 위치)
베이스-레지스터 주소 지정
- 참조된 레지스터는 기억 장치 주소를 가지고 있으며, 주소 필드는 그 주소로부터의 변위값을 가진다.
- 레지스터 참조는 묵시적 or 명시적이다.
- 기억 장치 참조는 지역성을 이용한다.
- 세그멘테이션(Segmentation) 구현을 하는데 편리하다.
$A + (R) => Logical Address$
$(R) => Segment-Base Registor$
인덱싱
- $Data Array(Vector)$에 주로 사용
- 주소 필드가 주 기억장치 주소를 가리키고, 지정된 레지스터는 그 주소로부터 양의 변위값을 가지고 있다.
- 주 용도는 반복 연산의 수행을 위한 효율적인 메커니즘 제공이다.
'컴퓨터 구조' 카테고리의 다른 글
축소 명령어 세트 컴퓨터 : RISC (0) | 2024.03.28 |
---|---|
프로세서의 조직과 기능 (0) | 2024.03.28 |
제 12장 명령어 세트 : 특성과 기능 (0) | 2024.03.28 |
제 10장 컴퓨터 산술 (0) | 2024.03.28 |
제 8장 운영 체제 지원 (0) | 2024.03.28 |