컴퓨터 명령어 인덱스드 어드레싱 모드
저번 시간에 이어서 컴퓨터의 명령어 연산필드 중 어드레싱 모드를 집중적으로 살펴보겠습니다. 특히 자동증가 모드, 자동감소 모드, 직접 주소 모드 등을 알아보는 시간을 갖도록 하겠습니다.
1. 자동증가 또는 자동감소 모드
이는 레지스터의 값이 메모리를 액세스하고난 직후 자동적으로 하나 증가하거나 감소한다는 사실을 제외하면 레지스터 간접 모드와 같습니다. 만약 메모리에 있는 데이타가 어떤 표라면, 매번 액세스할 때마다 하나씩 증가 또는 감소시켜 야 할 필요가 있습니다. 이런 상황은 일반적으로 흔히 발생하므로 어떤 컴퓨터에서는 데이타 액세스 뒤에 자동적으로 레지스터의 값을 증가 또는 감소시킵니다.
명령어의 주소 필드는 CPU의 제어 장치가 메모리로부터 피연산자를 가져오는데 사용됩니다. 흔히 주소 필드의 주소는 피연산자의 주소가 아니라, 그것으로 부터 실제 피연산자의 주소가 계산됩니다. "유효 주소"란 주어진 어드레싱 모드에 의해 얻어진 피연산자의 메모리 주소를 가리키는 말입니다.
2. 직접 주소 모드
직접 주소 모드 (direct address mode) 에서는 명령어의 주소 부분이 그대로 유효 명령어의 주소 필드에 의해 직접적으로 주어집니다. 분기 (branch) 형식의 명령 어에서는 실제 분기할 주소를 나타냅니다.
3. 상대 주소 모드
상대 주소 모드 (relative address mode)는 프로그램 카운터가 명령어의 주소 부분과 더해져서 유효 주소가 결정됩니다. 명령어의 주소 부분은 보통 기호를 포 함한 수(2의 보수 표현)이며 음수나 양수 둘다 될 수 있습니다. 이 숫자가 프로그램 카운터에 더해져서 유효 주소가 됩니다.
예를 들어 프로그램 카운터는 825라 하고, 명령어의 주소 부분은 24라 해보겠습니다. fetch 사이클 동안에 주소 825의 명령어 가 메모리로부터 읽혀지고, 프로그램 카운터는 하나 증가해 826이 됩니다. 유효 주소는 826 + 24로 850이 됩니다. 이는 다음 명령어로부터 24번지만큼 앞에 있는 주소입니다. 이런 주소 지정 방법은 명령어에서 분기해야 할 위치가 그 명령 어 부근에 있을 때 흔히 사용됩니다. 또 이는 메모리의 전체 주소를 지정하는 것 보다 적은 비트가 들기 때문에 더욱 짧은 주소 필드를 가질 수가 있습니다.
4. 인덱스드 어드레싱 모드
인덱스드 어드레싱 모드 (indexed addressing mode)는 인덱스 레지스터의 내용이 명령어의 주소 부분에 더해져서 유효 주소가 얻어집니다. 인덱스 레지스터는 인덱스값을 갖는 특별한 CPU레지스터입니다. 명령어의 주소 부분은 메모리 에서 데이타 배열 (array)이 시작되는 주소를 가리킵니다. 배열의 각 피연산자는 시작하는 주소로부터 상대적인 위치에 저장되어 있습니다. 시작하는 주소와 피연산자의 주소 사이의 차이는 인덱스 레지스터가 지니고 있는 인덱스값입니다.
배열 내의 어떤 피연산자도 적당한 인덱스값을 가진 인덱스 레지스터에 의해 똑같은 명령어로 액세스될 수 있습니다. 인덱스 레지스터는 연속적으로 피연산자를 액세스 하기 위해 하나씩 증가되는 기능도 가질 수 있습니다. 어떤 컴퓨터에서는 CPU의 한 레지스터를 단지 인덱스 레지스터로만 사용하는데, 인덱스 모드의 명령어가 사용된다면 이 레지스터가 묵시적으로 사용되게 됩니다. 여러 개의 레지스터를 가진 컴퓨터에서는 어떤 레지스터도 인덱스값을 가질 수가 있고, 그런 경우 명령어 속에 어떤 레지스터가 사용되는지를 나타내야 합니다.
5. 베이스 레지스터 어드레싱 모드
베이스 레지스터 어드레싱 모드 (base register addressing mode) 에는 베이스 레지스터의 내용이 명령어의 주소 부분에 더해져서 유효 주소가 결정됩니다. 인덱스드 어드레싱 경우와는 인텍스 레지스터 대신 베이스 레지스터가 사용되었 다는 것만이 다릅니다. 두 가지 방법의 차이점은 유효 주소를 계산하는 방법이 아니라 쓰임새의 다름에 있습니다.