주소지정 방식(addressing mode)
- 주소 비트들을 이용하여 오퍼랜드의 유효 주소(effective address)를 결정하는 방법
- 주소 지정 방식의 종류는 매우 다양하고 CPU 마다 다르다.
기호
- EA : 유효 주소(Effective Address), 데이터가 저장된 기억장치의 실제 주소
- A :명령어내의주소필드내용(오퍼랜드필드의내용이기억장치 주소인 경우)
- R : 명령어 내의 레지스터 번호 (오퍼랜드 필드의 내용이 레지스터 번호인 경우)
- (A) : 기억장치 A번지의내용
- (R):레지스터 R의내용
명령어가 실행되는 과정에서 주소지정 방식에 따라 유효 주소인 EA가 결정되며, EA는 실제 데이터를 읽어오기 위한 주소로 사용된다. 주소지정 방식이 복잡해질수록 EA를 결정하는데 걸리는 시간이 더 길어진다.
직접 주소지정 방식
명령어 내 오퍼랜드 필드의 값을 유효 주소로 사용하여 연산에 필요한 데이터를 인출하는 방식
- 이 방식을 이용하면 데이터 인출을 위하여 한 번의 기억장치 액세스만 필요하며 유효 주소 결정을 위한 다른 절차나 계산이 필요하지 않다. 그러나 명령어에서 일정 부분은 연산코드를 위해 사용되기 때문에 남은 비트들만 주소 비트로 사용될 수 있다.
- ex) 명령어의 길이가 n비트이고, 그 중에서 연산 코드의 비트들이 p개라면, 직접 주소지정 방식을 이용하여 지정할 수 있는 기억장소의 수는 2^n-p개가 된다.
- 직접 액세스할 수 있는 기억 장치 주소 공간이 오퍼랜드 필드의 비트 수에 의해 제한되는 것이 이 방식의 단점이다.
간접 주소지정 방식
오퍼랜드가 가리키는 기억 장치의 내용을 유효 주소로 사용하여 연산에 필요한 데이터를 인출하는 방식으로서, 두 번의 기억장치 액세스가 필요하다.
직접 주소지정 방식의 문제점
주소 필드의 길이가 짧기 때문에 주소를 지정할 수 있는 기억장치 범위가 제한된다는 것이다.
직접 주소지정 방식의 문제점의 해결책
명령어의 오퍼랜드 필드의 기억장치 주소(A)가 가리키는 기억장소에 실제 사용할 데이터의 유효 주소(EA)를 저장해 두는 방법이 있다.
직접 주소지정 방식의 장점
- 최대 기억장치 용량이 그 기억 장소에 저장된 전체 비트 수에 의해 결정되므로, 그 범위가 더욱 확장될 수 있다. 즉, 기억장치의 단어 길이가 n비트라면, 이 명령어에 의해 직접 주소지정 될 수 있는 기억 장소들의 수는 최대 2^n개가 될 수 있다.
- 유효 주소는 EA = (A)로 표현한다.
- 이 방식을 위해 명령어 형식은 간접 비트(I)가 포함되어야 한다. 만약 I 비트가 0이라면, 직접 주소지정 방식을 나타내므로 오퍼랜드 자체가 유효 주소(EA)이다. 그러나 만약 I비트가 1이라면, 간접 주소 지정 방식이므로 오퍼랜드가 지정하는 위치로부터 유효 주소를 인출해와야 한다.
간접 주소지정 방식의 단점은 실행 사이클 동안에 두 번의 기억장치 액세스가 필요하다.
- 액세스 주소를 읽어오기 위한 것.
- 그 주소가 지정하는 위치로부터 실제 데이터를 인출하기 위한 것.
간접 주소지정 방식에서는 여러 단계의 간접 지정도 가능하다. 이러한 방식을 다단계(multi-level) 혹은 연속적(cascaded) 간접 주소지정 방식이라고 부르며, 유효 주소는 다음과 같이 표현될 수 있다. EA = ((..(A)..))
이 방식은 특별한 프로그래밍 기법을 위해 사용되기도 하지만, 한 개의 오퍼랜드를 인출하기 위하여 세 번 혹은 그 이상의 기억장치 참조들이 필요하다는 단점이 있다.
묵시적 주소지정 방식(implied addressing mode)
- 명령어 실행에 사용될 데이터가 묵시적으로 지정되어 있는 방식
- 명령어 실행에 필요한 데이터의 위치를 지정하지 않더라도 이미 묵시적으로 정해져 있다.
- ex)SHL 명령어는 누산기(AC)의 내용을 좌측으로 시프트(shift)하는 명령어로서, 오퍼랜드 필드가 없지만 자동적으로 누산기에 대하여 연산이 수행된다.
- 이 주소지정 방식에는 지정된 내용을 자동적으로 스택에 저장하는 PUSH 명령어나 스택의 최상위에 저장되어 있는 내용을 인출하는 POP 명령어도 포함된다.
- ex) PUSH R1 명령어는 레지스터 R1의 내용을 스택에 저장하는데, 이때 스택 포인터(SP)의 내용이 스택의 위치를 지정하는 유효 주소로 사용된다. 이 방식의 가장 큰 장점은 어퍼랜드가 없거나 한 개 뿐이기 때문에 명령어 길이가 짧다는 점이다.
즉시 주소지정 방식(immediate addressing mode)
- 명령어 내에 포함되어 있는 데이터를 연산에 직접 사용하는 방식
- 명령어는 연산에서 사용할 데이터를 명령어 코드 내에 포함하고 있다.
- 즉, 오퍼랜드 필드의 내용이 연산에 즉시 사용될 수 있는 실제 데이터이다. 따라서 데이터 인출 과정이 별도로 필요하지 않다.
- 프로그램에서 레지스터나 변수의 초기 값을 어떤 상수값(constant value)으로 세트하는 데 주로 사용되며, 저장되는 값이 2의 보수로 표현되는 수라면, 오퍼랜드 필드의 가장 좌측 비트가 부호(sign) 비트로 사용된다.
즉시 주소지정 방식의 장점
- 데이터를 인출하기 위하여 기억장치를 액세스할 피룡가 없기 때문에 실행 사이클이 짧아진다.
즉시 주소지정 방식의 단점
- 사용할 수 있는 수의 크기가 어퍼랜드 필드의 비트 수에 의해 제한된다.
레지스터 주소지정 방식(register addressing mode)
- 명령어의 오퍼랜드가 가리키는 레지스터에 저장되어 있는 데이터를 연산에 사용하는 방식
- 연산에 사용될 데이터가 레지스터에 저장되어 있다. 따라서 오퍼랜드 필드의 내용은 레지스터 번호로 사용된다.
- 따라서 EA = R이 된다.
- 이 방식에서 사용될 수 있는 레지스터들의 수는 오퍼랜드 필드의 비트 수에 의해 결정된다. 만약 그 필드가 k비트라면, 2^k개의 레지스터들이 이 방식을 위하여 사용될 수 있다.
- 일반적으로 레지스터를 지정하는 어퍼랜드 필드의 길이는 3~4비트이므로, 8~16개의 레지스터들을 지정할 수 있다.
레지스터 주소지정 방식의 장점
- 명령어 형식에서 오퍼랜드 필드의 비트 수가 적어도 되고, 데이터 인출을 위하여 기억장치를 액세스 할 필요가 없다.
- CPU 내부 레지스터에 대한 액세스 시간이 주기억장치 액세스 시간보다 훨씬 더 짧기 때문에, 명령어 실행 시간도 짧아진다.
레지스터 주소지정 방식의 단점
- 데이터가 저장될 수 있는 위치가 CPU 내부 레지스터로 제한된다.
레지스터 간접 주소지정 방식(register-indirect addressing mode)
- 지정된 레지스터의 내용을 유효 주소로 사용하여, 그 주소가 가리키는 기억장치로부터 읽어온 데이터를 연산에 사용하는 방식.
- 오퍼랜드 필드(레지스터 번호)가 가리키는 레지스터의 내용이 유효 주소가 된다.
- EA = (R)이다. 따라서 지정된 레지스터의 내용이 기억장치 주소로 사용되어 실제 데이터를 인출하게 된다.
- 레지스터 간접 주소지정 방식을 이용하는 경우에 주소를 지정할 수 있는 기억 장치 영역은 레지스터의 길이에 달려있다.
- ex) 레지스터의 길이가 16비트라면 2^16 = 64Kword, 32비트라면 2^32 = 4Gword의 기억장치 영역을 주소지정 할 수 있다. 이 방식을 이용하면 데이터 인출을 위하여 한 번의 기억장치 액세스가 필요하다.
변위 주소지정 방식(displacement addressing mode)
- 지정된 레지스터의 내용과 명령어 내 오퍼랜드(변위)를 더하여 유효 주소를 결정하는 주소지정 방식
- 직접 주소지정방식과 레지스터 간접 주소지정 방식을 조합하면 변위 주소지정방식이라는 유연성이 높은 방식을 만들 수 있다.
- 이 방식은 유효주소 결정을 위해 사용되는 레지스터에 따라 여러가지 명칭으로 불리지만, 기본 매커니즘은 동일하다.
- ex) EX의 일반적인 표현 : EA = A + (R)
- 변위 주소 지정방식을 사용하는 명령어는 두 개의 오퍼랜드를 가진다. 그들 중의 하나는 변위를 나타내는 주소 A이고, 다른 오퍼랜드는 레지스터 번호 R이다.
- 유효주소(EA)는 R이 가리키는 레지스터의 내용을 A와 더함으로써 결정된다.
- 사용되는 레지스터에 따라 여러 종류의 변위 주소지정 방식들이 정의될 수 있다.
가장 널리 사용되고 있는 대표적인 3가지 방식
상대 주소지정 방식(relative addressing mode)
- 프로그램 카운터(PC)의 내용과 명령어 내 오퍼랜드(변위)를 더하여 유효 주소를 결정하는 주소지정 방식
- 이 방식에서는 레지스터로서 프로그램 카운터(PC)가 사용된다.
- 따라서 EA = A + (PC)이다. 즉, PC의 내용은 다음에 실행할 명령어의 주소이므로, 변위는 그 명령어의 위치를 기준으로 한 상대적인 값이 된다. A는 일반적으로 2의 보수로 표현된다.
- 이 방식은 주로 분기 명령어에서 사용되는데, 변위가 양수인 경우에는 앞(forward)방향으로 분기하고, 음수인 경우에는 반대(backward)방향으로 분기한다.
- PC의 내용이 새로운 분기 목적지 주소인 EA로 갱신된다.
상대 주소지정 방식의 장점
- 이 방식을 사용하면 변위의 범위가 오퍼랜드 필드의비트 수에 의하여 제한되지만, 전체 기억장치 주소가 명령어에 포함되어야 하는 일반적인 분기 명령어 보다 적은 수의 비트만 있으면 된다.
- 레지스터로서 PC가 묵시적으로 저장되기 때문에 명령어 형식에서 R필드가 필요하지 않다. 따라서 R 필드와 A필드가 모두 주소 필드 (A)로 사용될 수 있다.
인덱스 주소지정 방식(indexed addressing mode)
- 인덱스 레지스터의 내용과 명령어 내 오퍼랜드(변위)를 더하여 유효 주소를 결정하는 주소지정 방식
- 인덱스 레지스터의 내용과 변위 A를 더하여 유효 주소를 결정한다. 인덱스 레지스터는 인덱스(index)값을 저장하는 특수 레지스터이다. 이 레지스터를 IX이라고 하면, EA = A+(IX)가 된다.
- 주소 A는 기억장치에 저장된 데이터 배열(data array)의 시작 주소를 가리킨다.
- 인덱스 레지스터의 내용은 그 배열의 시작 주소로부터 각 데이터까지의 거리를 나타낸다. 따라서 데이터 배열을 처리하는 프로그램 루프 내에서 인덱스 레지스터의 내용을 증가 혹은 감소시킨다면, 동일한 명령어를 사용하여 배열 내의 데이터들을 순차적으로 액세스하는 것이 가능해진다.
- 그 데이터에 대한 처리를 수행한 후에 그 다음 데이터들을 순차적으로 액세스 하려면, 인덱스 레지스터의 내용만 1씩 증가시키면 된다.
자동 인덱싱(auto-indexing)
- 인덱스 주소지정이 완료된 후에 자동적으로 인덱스 레지스터 내용을 증가 혹은 감소하는 방식
- 즉, 연속된 데이터들을 차례대로 액세스하는 경우, 명령어 사이클 동안에 인덱스 레지스터의 내용이 자동적으로 증가 혹은 감소되도록 할 수 있다. 이것을 자동 인덱싱이라 한다.
- 유효 주소가 결정될 때마다 두 연산들이 연속적으로 수행된다.
- EA = A + (IA)
- IX <- IX + 1
베이스-레지스터 주소지정 방식(base-register addressing mode)
- 베이스 레지스터의 내용과 명령어 내 오퍼랜드(변위)를 더하여 유효 주소를 결정하는 주소지정 방식
- 이 방식에서는 베이스 레지스터의 내용과 변위 A를 더하여 유효 주소를 결정한다.
- 베이스 레지스터를 BR이라고 하면, EA = A + (BR)이 된다. 이 방식은 인덱스 주소지정 방식과 유사하다.
두 방식의 차이점
- 레지스터가 사용되는 방법에 따라 다르다.
- 인덱스 레지스터에는 명령어에 포함된 주소 A를 기준으로 한 인덱스 값이 저장되는 반면, 베이스 레지스터에는 기준이 되는 명령어의 주소가 저장된다.
- 용도상의 차이를 보면, 인덱스 주소지정 방식은 데이터 배열의 액세스에 주로 사용되지만, 베이스-레지스터 주소지정 방식은 프로그램의 시작 위치를 지정하는데 사용된다.
- ex) 다중 프로그래밍 시스템에서 기억장치의 어떤 위치에 저장되어 있는 프로그램들과 데이터들을 다른 위치로 이동시켜야 하는 경우 프로그램 내의 분기 명령어나 데이터 액세스 명령어들의 주소 필드 값도 이동된 후의 프로그램 및 데이터 위치를 가리키도록 바뀌어야 한다.
- 베이스-레지스터 주소지정 방식을 사용하면 그 명령어들의 주소 필드는 변경할 필요가 없고, 베이스 레지스터의 내용만 이동될 위치의 시작주소로 변경하면 된다.
Reference
컴퓨터 구조론 개정5판
https://yz-zone.tistory.com/69
[ 컴퓨터구조 ]2.4.2 명령어 세트
[ 주소지정 방식(addressing mode) ] ▣ 단점 ▪ 명령어의 길이가 증가한다 ▪ 명령어 해독 과정이 복잡해지고, 실행 시간이 길어진다 ▣ 주소지정 방식 ▪ 명령어 실행에 필요한 오퍼랜드의 주소를
yz-zone.tistory.com
'CS > 컴퓨터 구조론' 카테고리의 다른 글
컴퓨터 구조론 3장 [컴퓨터 산술과 논리 연산] (0) | 2025.03.24 |
---|---|
컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 세트3] (0) | 2025.03.23 |
컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 세트] (0) | 2025.03.20 |
컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 파이프라이닝] (0) | 2025.03.14 |
컴퓨터 구조론 2장 [CPU의 구조와 기능 - 명령어 실행] (0) | 2025.03.12 |