본문 바로가기

CPU 명령어 종류를 알아보자 2장

지난 CUP 명령어 종류 1장에서 다룬 3가지에 이은 남은 5가지 정보입니다. 이전 글은 왼쪽에 위치한 해당 링크로 이동하여 확인할 수 있습니다.

 

4) 레지스터 주소 지정 방식

레지스터 주소 지정 방식은 CPU내의 레지스터가 명령어에 따라 지정되는 방식으로 해당 레지스터에 실제 데이터가 기억되어 있으므로 직접 주소 지정 방식과 유사합니다. 직접 주소 지정 방식과의 차이점은 주소 필드가 참조하는 것은 기억 장치가 아니라 레지스터라는 점입니다.

 

전형적으로 레지스터를 참조하는 주소 필드는 참조될 범용 레지스터에 3비트 또는 4비트를 할당합니다. 레즈스터 주소지정 방법의 특징은 기억 장치 참조가 필요 없으며 레지스터의 접근 시간이 기억 장치를 접근하는 것보다 훨씬 짧다는 것을 들 수 있습니다. 즉 레지스터를 액세스하는 속도가 매우 빠릅니다. 또한 레지스터를 액세스하는데 필요한 정보는 레지스터의 개수가 이미 정해져 있기 때문에 매우 작은 수의 비트로 표현 가능합니다.

 

이러한 장점은 실행시간이나 메모리를 절약할 수 있게 합니다. 메모리 워드는 다른 주소 지정 방식에 비해 훨씬 줄어들지만 주소 지정이 가낭한 공간이 적다는 단점이 있습니다. 만약 레지스터 주소 지정을 명령어 집합 내에서 많이 사용한다면 그만큼 CPU 레지스터를 많이 이용하는 것입니다. 기억 장치의 용량에 비해 레지스터의 수는 지극히 제한되어 있으므로 이 방식을 효율적으로 사용하는 것이 바람직합니다. 그리고 모든 피연산자가 기억 장치에서 레지스터로 적재되고 한 번 연산이 수행된 후 그 결과를 기억 장치에 저장한다면 불필요한 중간 과정이 추가되어 있습니다. 그 대신에 중간 계산 결과가 레지스터에 남아 있다면 보다 효율적인 처리가 됩니다.

 

5) 레지스터 간접 주소 지정 방식

레지스터 직접 주소 지정이 직접 주소 지정과 유사하듯이 레지스터 간접 주소 지정 방식은 간접 주소 지정 방식과 유사합니다. 레지스터 간접 지정 방식은 피연산자가 레지스터를 지정하고 다시 그 레지스터의 값이 실제 데이터가 저장되어 있는 기억 장소의 주소를 지정합니다. 이것은 데이터가 표의 형식으로 연속된 경우에는 편리하다는 특징을 지니고 있으나 반면에 데이터가 불규칙한 불연속인 경우에는 매우 불편하다는 단점을 가지고 있습니다. 레지스터 간접 주소 지정 방식에서는 레지스터에 나타난 정보는 피연산자가 아니라 메모리 내의 주소입니다. 장단점은 기본적으로 레지스터 주소 지정 방식과 같습니다. 추가로 간접 주소 지정에 비해 기억 장치 참조 횟수가 적다는 것을 알 수 있습니다.

 

6) 상대 주소 방식

주소를 실제의 메모리 공간과 연관시키는 방법에 따라 절대 주소와 상대 주소가 있습니다. 절대 주소는 주소를 가지고 직접 앞에서 소개한 데이터의 접근 방식에 따라 접근할 수 있는 것입니다. 상대 주소는 절대 주소로 변환하여야 되며 그 주소로는 직접 데이터에 접근할 수 없고 모든 주소를 특정한 기본 주소에 상대적으로 표시되므로 절대 주소를 구하기 위해서는 상대 주소와 기본 주소를 이용한 계산이 필요합니다. 상대 주소 방식에서 피연산자의 주소는 프로그램 카운터(PC)와의 관계에 따라 지정됩니다. 이 주소 방식에서는 명령어에 포함된 주소는 PC에 수치로서 가산되고 피연산자를 지정합니다

 

컴퓨팅 시스템의 메모리는 일반적으로 페이지라는 구조를 가지고 있습니다. 1페이지는 256위드로 구성되어 있는 경우가 대부분이고 페이지 구조에 따라 메모리는 조그마한 프로그램으로 분할됩니다. 이 방식에서는 PC를 베이스 레지스터로 간주하며 현재 명령어의 주소가 주소 필드의 값과 합해져서 유효 주소를 얻습니다. 그러므로 명령어 자신의 주소를 참조합니다. 이 경우 주소 필드의 값은 2의 보수로 다루어집니다.

 

이와 같이 유효 주소는 명령어의 주소에서 상대적으로 변위만큼 떨어진 장소가 됩니다. 마찬가지로 기억 장치의 참조 국부성 방식으로서 대부분의 기억 참조가 수행되는 명령어에 근접하여 이루어진다면 상대 주소 지정의 사용은 명령어 내의 주소 비트를 절약할 수 있는 방식이 됩니다. 여기서 변위는 새로운 주소를 지정하기 위해 현재 주소에 더하는 값을 말합니다.

 

7) 베이스 레지스터 주소 지정 방식

베이스 레지스터 주소 지정 방식은 주소 지정을 위해 베이스 레지스터라는 레지스터를 이용하여 그 내용을 기준 주소로 사용하는 방식입니다. 이 방식에 사용하는 레지스터를 베이스 레지스터라고 합니다. 베이스 레지스터는 기준 주소를 갖고 있고 명령어에 있는 기준 주소에 대해서 변위를 나타냅니다. 이 방식은 다수의 베이스 레지스터를 사용함으로써 주소 길이가 줄어듭니다. 이때 각각의 기억 장소에 대한 포인터를 갖습니다. 이 경우에는 베이스 레지스터의 내용을 명령어의 주소 부분에 더하여 유효 주소를 구합니다. 이 방식은 인덱스 주소 방식과 유사하며 다른 점은 단지 인덱스 레지스터 대신에 베이스 레지스터가 사용되었다는 것만 다릅니다. 이 두 가지 방법의 차이점은 유효 번지를 계산하는 방법이 아니라 사용 방법이 다릅니다. 인덱스 레지스터는 명령어의 주소 부분에 대한 상대적인 위치를 가지고 있으나 반면에 베이스 레지스터는 베이스 주소를 가지고 있습니다. 명령어의 주소 부분은 상대적인 변위가 됩니다. 프로그램이나 데이터가 메모리의 한 세그먼트로부터 다른 세그먼트로 옮겨질 경우 명령의 주소는 이러한 위치의 변경을 반영하여야 합니다. 이 방식에서 베이스 레지스터가 있다면 명령어의 변위는 변경될 필요가 없으나 베이스 레지스터의 값이 다른 메모리 세그먼트의 시작 부분을 참조로 해서 변경하면 됩니다.

 

8) 인덱스 레지스터 주소 지정 방식

인덱싱은 주소 필드 주기억 장치의 주소를 가리키며 참조하는 레지스터는 양의 변위를 갖습니다. 이것은 베이스 레지스터 주소 지정 방식의 반대입니다. 인덱싱에서는 주소 필드가 기억 장치의 주소로 간주되기 때문에 일반적으로 베이스 레지스터 주소 지정 방식의 명령어에 비해 주소 필드의 비트 수가 더 많습니다. 인덱싱은 인덱스 레지스터가 있어서 해당 내용과 메모리 주소 레지스터의 값을 필요할 때마다 더하여 피연산자를 참조합니다. 또한 값을 변경함에 따라 여러 데이터에 대하여 같은 연산을 반복할 수 있습니다.

 

상대 주소 지정에서의 기준 주소는 PC이지만 인덱스 주소 지정 방식은 오퍼랜드 부분이 지정하는 인덱스 레지스터의 번호와 상수 값인 변위로 나누어져 있습니다. 따라서 실제 사용해야 할 데이터의 주소는 지정된 인덱스 레지스터의 내용과 상수 값을 합하여 주소를 지정합니다. 기타 다른 명령어에서도 사용이 가능하며 피연산자의 길이를 가능한 한 짧게 하면서 기억 장치의 모든 주소를 지정하는 장점을 가지고 있습니다. 그리고 인덱스 주소 지정은 배열 또는 데이터를 표나 사전처럼 구성한 구조를 포함하는 프로그램을 처리할 경우에 대단히 편리합니다. 즉 표의 첫 요소 주소를 인덱스 레지스터에 기억시키고 다른 표의 요소는 첫 번째 요소와의 상대 관계로 주소화할 수 있습니다(i = i+1)

 

인덱스 주소 지정 방식은 변화되는 부분으로 인덱스 레지스터를 사용하는 반면에 벡터의 주소는 명령어 내에 포함합니다. 따라서 유효 주소는 처리기의 주소 계산 기구에 의해 두 구성 성분을 합하여 계산합니다. 이 경우 인덱스 레지스터에 존재하는 변화 부분에 대해서만 프로그램에 의해 갱신됩니다.