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

따라서 명령어는 피연산자 필드를 사용해 데이터의 위치에 대한 정보를 제공한다.

주소 지정 방식(Memory Addressing Modes)은 피연산자 필드를 사용해 데이터의 유효 주소를 결정하는 방법이다.

유효 주소는 기억 장치에서 데이터가 실제로 위치한 공간을 의미한다.

 

명령어에 담을 수 있는 비트 수에는 제한이 있기 때문에 최대한 효율적으로 데이터의 위치를 지정하는 다양한 주소 지정 방식이 사용된다.

주소 지정 방식은 피연산자의 정보로 부터 원하는 데이터를 얻기 위해 거쳐야하는 단계 수에 따라 크게 세가지로 분류할 수 있다.

 

0-단계 주소 지정 방식

유효 주소를 파악하기 위한 별도의 계산이 필요 없는 방식으로 데이터의 유효 주소를 명시하지 않는다.

  • 즉치 주소 지정(Immediate Addressing Mode)
    명령어의 피연산자 필드에 데이터가 포함되어 있다. 주소 지정과는 상관이 없으며 명령어를 적재하면 바로 데이터를 이용할 수 있다. 작은 정수 데이터나 상수를 저장하기 위해 사용된다.

  • 묵시 주소 지정(Implied Addressing Mode)
    정해진 기억장치에 데이터가 저장된다. 항상 정해진 장소에 데이터가 있기 때문에 위치를 명시할 필요가 없다. 유효 주소를 계산할 필요는 없지만 제한된 기억장치에서만 사용 가능하므로 많은 데이터에 대해 사용할 수 없다.

1-단계 주소 지정 방식

유효 주소를 확정하기 위해 한차례의 연산 과정이 필요한 방식이다.

  • 레지스터 직접 주소 지정(Register-Direct Addressing)
    데이터가 있는 레지스터의 주소를 피연산자 필드에 명시하는 방식이다. 자주 사용하는 소수의 데이터에 빨리 접근하기 위해 사용한다.

  • 직접 주소 지정(Direct addressing)
    데이터가 있는 메모리의 주소를 피연산자 필드에 명시한다. 데이터에 접근할 땐 피연산자 필드에 명시된 메모리 주소를 사용한다. 메모리 주소 공간 전체를 명시하려면 명령어가 너무 길어지기 때문에 주소 공간의 일부만 사용하거나 메모리 용량을 줄여야 한다.

2-단계 주소 지정 방식

유효 주소를 확정하기 위해 두차례의 연산 과정이 필요한 방식이다. 많은 데이터의 위치를 명시할 수 있으나 두단계의 연산이 필요하므로 데이터 참조에 소요되는 시간이 커진다.

  • 레지스터 간접 주소 지정(Register-Indirect addressing)
    피연산자 필드에 레지스터 주소를 명시하며, 레지스터엔 데이터가 담긴 메모리의 주소가 명시되어 있다. 따라서 레지스터의 피연산자 필드를 읽고 다시 한 번 메모리에 접근해야 데이터를 참조할 수 있다.

  • 메모리 간접 주소 지정(Memory-Indirect Addressing)
    데이터가 있는 메모리의 주소를 피연산자 필드에 명시한다. 메모리 주소 공간과 용량의 제약을 해결해주지만 데이터를 참조하기 위해 두번의 메모리 접근이 필요하다.

  • 변위 주소 지정(Displacement Addressing)
    명령어에 포함된 2개의 피연산자 필드를 사용해 메모리의 주소를 확정하는 방식으로, 색인 주소 지정과 베이스 주소 지정이 있다.

    1) 색인 주소 지정(Indexed Addressing)은 2개의 피연산자 필드 중 하나는 베이스 주소로 사용할 메모리 주소를, 다른 하나는 변윗값으로 사용할 레지스터 주소를 명시한다. 주소 값과 색인 레지스터 내용을 더한다. 이 덧셈 결과를 메모리 주소로 사용하며 메모리에 저장된 데이터를 참조한다. 배열처럼 각 구성 요소의 위치가 실행 시간에 결정될 경우 주로 사용한다.

    2) 베이스 주소 지정(Based Addresing)은 2개의 피연산자 필드 중 하나는 베이스 주소로 사용할 레지스터 주소를, 하나는 변윗값으로 사용할 메모리 주소를 명시한다. 함수에 전달되는 매개 변수의 시작 주소처럼 상대적 위치를 알 고 있는 경우 사용한다.

    즉, 색인 주소 지정베이스 주소로 피연산자 필드의 메모리 주소를, 베이스 주소 지정의 경우 베이스 레지스터가 가리키는 메모리 주소를 사용한다.

  • PC 상대 주소 지정(PC-Relative Addressing)
    Program Counter (PC) 값에 피연산자 필드의 값을 더해서 유효 주소를 구한다. 주로 분기 명령어에서 사용하는데, 분기할 명령어가 현재 참조된 명령어에서 가까운 곳에 있는 경우가 많기 때문에 상대적인 변윗값으로 피연산자 필드를 이용한다.


참고 자료

컴퓨터 아키텍처, 한빛 아카데미, 우종정 지음