본문 바로가기

학교/컴퓨터 구조

4. 명령어 집합 (2/2) 주소 지정 방식

컴퓨터에서 연산을 수행하려면 필요한 데이터의 위치를 알아야 한다.

그리고 데이터를 저장하는 공간은 메모리, 레지스터 등 다양하다

 

명령어의 피연산자 필드와 데이터의 실제위치의 관계식은 이걸 사용한다.

R = 피연산자 필드가 명시하는 레지스터 주소

A = 피연산자 필드가 명시하는 메모리 주소

EA = 참조되는 데이터를 포함하는 장소의 실제 주소, 즉 유효 주소

Reg[x] = 레지스터 x의 내용

M[x] = 메모리 x번지의 내용

 

 

0-단계 주소 지정 방식

 

데이터가 있는 위치를 파악하기 위한 특별한 과정이 없어서,

데이터의 유효 주소를 명시하지 않는다.

즉치 주소 지정과, 묵시 주소 지정으로 나뉜다.

 

1. 즉치 주소 지정(immediate addressing mode)

 

상수 주소 지정, 즉석 주소 지정 등으로 불린다.

명령어의 피연산자 필드에 데이터가 포함돼있다. 즉, 명령어에 내장된 상태다.

따라서, 명령어를 CPU로 인출만 하면 데이터를 즉시 이용할 수 있다.

하지만, 명령어의 일부를 사용하므로, 제한된 비트를 위한 공간으로 유용하다.

즉치 주소 지정

 

 

2. 묵시 주소 지정(implied addressing mode)

 

- ACC나, PC등 정해진 기억장치에 데이터가 저장된다.

- 데이터의 위치를 명시할 필요가 없기 때문에, 이 방식은 정해진 장소에 데이터가 있는 경우에 적합하다.

- 유효 주소를 계산할 필요는 없지만, 데이터를 사용하려면, 기억 장치를 읽어야 한다.

- 제한된 기억장치 때문에, 많은 데이터를 사용할 수 없다.

 

묵시 주소 지정

 

 

1-단계 주소 지정 방식

 

데이터의 유효 주소를 찾기 위해, 주소 계산이나 읽기 연산 과정을 한 번 수행하는 방식이다.

데이터의 위치를 찾기 위해, 명령어의 피연산자 필드를 주소로 사용한다.

 

1. 레지스터 직접 주소 지정

 

데이터가 레지스터 파일 중 한 곳에 있고, 데이터가 있는 레지스터의 주소를 피연산자에 필드에 명시

레지스터를 사용하기에, 빠른 속도를 보여주지만, 레지스터는 용량이 작기 때문에,

자주 사용하는 소수 데이터를 사용할 때 주로 사용한다.

 

유효 주소 = 레지스터 주소 ( EA = R)

레지스터 직접 주소 지정

 

2. 직접 주소 지정

데이터가 있는 메모리의 주소를 피연산자 필드에 명시.

피연산자 필드에 명시된 메모리 주소를 이용해 접근을 하지만,

메모리 주소 공간 전체에 접근하려면, 피연산자 필드가 길어진다.

따라서, 주소 공간의 일부만 사용하거나, 메모리 용량을 줄여야한다.

요즘은 거의 사용하지 않는다.

 

유효 주소 = 메모리 주소 (EA = A )

 

직접 주소 지정

 

 

2-단계 주소 지정 방식

데이터의 유효 주소를 찾기 위해, 주소 계산이나 읽기 연산 과정을 두 번 수행하는 방식이다.

위의 0, 1 단계 주소 지정 방식보다는 느리지만, 많은 데이터의 위치를 명시할 수 있다.

 

 

1. 레지스터 간접 주소 지정

 

피연산자 필드는 레지스터 주소를 명시하고,

레지스터의 내용은 데이터가 있는 메모리 주소를 명시한다.

따라서, 레지스가 가리키는 주소를 사용해, 메모리에 접근한다.

 

유효 주소 = 레지스터[x] (EA = Reg[x])

 

레지스터 간접 주소 지정

 

 

2. 메모리 간접 주소 지정

 

데이터가 있는 메모리의 주소를 간접적으로 명령어의 피연산자 필드에 명시.

직접 주소 지정의 단점인, 메모리 주소 공간이나 메모리 용량 제약을 해결하지만,

데이터를 얻기 위해, 메모리르 두번 접근한다.

오늘날엔 쓰이지 않는다.

 

 

3. 변위 주소 지정

 

명령어에 2개의 피연산자 필드를 사용해, 데이터가 있는 메모리의 주소를 찾는다.

여기엔 색인 주소 지정과 베이스 주소 지정이 있다.

 

유효 주소 = 레지스터[x] + 메모리 주소 (EA = Reg[x] + a)

 

변위 주소 지정

 

3-1 색인 주소 지정

 

2개의 피연산자 필드 중 하나는, 베이스 주소로 사용할 메모리 주소를 명시하고,

다른 하나는 변위값으로 사용할 인덱스 레지스터 주소를 명시한다.

데이터를 얻으려면, 이 2개의 피연산자 필드 값을 더한 값으로 메모리에 접근한다.

베이스 주소는 컴파일 시간에 결정된다.

 

3-2 베이스 주소 지정

 

2개의 피연산자 필드 중 하나는, 베이스 주소로 사용할 레지스터 주소를 명시하고,

다른 하나는 변위값으로 사용할 메모리 주소를 명시한다. (위에하고 반대이다)

데이터 블록의 베이스 주소를 실행 시간에 알 수 있지만,

데이터의 상대 위치를 컴파일 시간에 알 수 있는 경우에 사용한다.

예를 들면, 함수 호출에 전달되는 매개변수의 시작주소는 컴파일 시간엔 모르지만,

매개변수들의 상대적 위치는 알 수 있다.

 

4. PC 상대 주소 지정

베이스 레지스터로 PC를 사용하는 경우에 해당된다.

프로그램 계수기를 명시할 필요가 없으므로, 변위 주소를 명시할 피연산자 필드 하나만 있으면 된다.

주로 분기 명령에서 사용한다.

PC의 내용과 변위 값을 합한 값이 분기할 명령어의 주소가 된다.

 

유효 주소 = PC + 메모리 주소 (EA = PC + A)

 

PC 상대 주소 지정