끝나지 않는 프로그래밍 일기

[시스템 프로그래밍]


주소 지정방식

(Addressing Mode)




여기서 어드레싱 모드(Addressing Mode)란 주소 지정방식을 말하며, 주소를 지정하는 방식에는 직접(Direct)과 간접(Indirect)를 제외하고도 상대(Relative), 함축(Implied) 등이 있지만 여기서는 다이렉트 어드레싱 모드(Direct Addressing Mode, 직접 주소 지정방식)와 인다이렉트 어드레싱 모드(Indirect Addressing Mode, 간접 주소 지정방식)에 대해서 알아보도록 하겠습니다.


먼저 다이렉트 어드레싱 모드(Direct Addressing Mode) 입니다. 이 다이렉트 어드레싱 모드는 명령을 수행하는데에 필요한 데이터의 위치를 직접적으로 가리킵니다. 이는 명령어 형식이 간단하다는 장점을 지니고 있지만, 비트 수에 비해 주소 표현 범위가 제한됩니다. (제한 범위 밖에 있는 주소값은 데이터를 참조하는 것은 문제가 됨, 주소값을 표현하는 비트가 8개라면 총 256개의 주소를 표현할 수 있으며, 0x0000에서 0x00ff까지 표현이 가능하다. 그런데 그 범위 밖의 주소값이 들어오면? 당연히 문제가 된다.)

<다이렉트 어드레싱 모드(Direct Addressing Mode)>


위의 다이렉트 어드레싱 모드는 0x96(150) 번지에 위치한 100이라는 데이터를 참조하는 상황이며, 직접적으로 주소를 가리킵니다. 반대로 인다이렉트 어드레싱 모드(Indirect Addressing Mode)는 어떨까요? 아래의 그림을 같이 살펴보도록 합시다.

<인다이렉트 어드레싱 모드(Indirect Addressing Mode)>


위 그림에서 왜 간접 주소방식인지 이해가 가시나요? 0x096(150) 번지에 담긴 0x320(800) 번지를 참조하여 1200이란 데이터를 참조합니다. 레지스터에 저장된 주소값이 0x096 번지라고 하면, 이 주소값이 실제 데이터가 있는 유효 주소입니다. 두번의 액세스가 이루어진다는 단점이 존재하지만, 다이렉트 어드레싱 모드가 지니고 있는 단점을 인다이렉트 어드레싱 모드가 해결합니다. 인다이렉트 어드레싱 모드는 명령이 짧아도 긴 주소에 접근이 가능하다는 장점을 지니고 있습니다.


정리하자면, 다이렉트 어드레싱 모드(Direct Addressing Mode, 직접 주소 지정방식)은 실제 데이터가 존재하고 있는 주소를 직접적으로 가리키며, 다이렉트 어드레싱 모드의 단점을 해결하기 위하여 나온 방식이 인다이렉트 어드레싱 모드(Indirect Addressing Mode, 간접 주소 지정방식)인데, 이 주소 지정방식은 주소부에서 지정하는 번지에 저장된 값을 주소값으로 참조합니다. 여기서 참조한 주소값은 실제 데이터가 위치하고 있는 유효 주소입니다.