명령어는 연산 코드(operation code)와 오퍼랜드(operand)로 이루어져 있습니다.
- 연산 코드 : 명령어가 수행할 연산
- 오퍼랜드 : 연산이 수행될 데이터 또는 데이터가 저장된 위치
주소 지정 방식이란 연산이 수행될 데이터의 위치를 찾는 방법입니다. 주소 지정 방식에는 5가지 유형으로 나뉩니다.
- 즉시 주소 지정 방식
- 직접 주소 지정 방식
- 간접 주소 지정 방식
- 레지스터 주소 지정 방식
- 레지스터 간접 주소 지정 방식
즉시 주소 지정 방식은 오퍼랜드 필드에 연산에 수행될 데이터를 직접 저장하는 방식입니다. 연산에 수행되는 데이터를 직접 저장하기 때문에 연산 속도가 빠르다는 장점이 있습니다. 그러나 데이터의 크기만큼 공간을 차지하고 있기 때문에, 데이터가 제한적으로 저장된다는 단점이 있습니다.
직접 주소 지정 방식은 오퍼랜드에 연산에 사용할 데이터의 주소가 저장됩니다. 이를 유효 주소를 저장한다라고 부릅니다. 유효 주소란 연산의 대상이 되는 데이터가 저장된 위치를 의미합니다. 매모리에 저장된 데이터의 주소를 저장하기 때문에, 데이터의 크기에 제약을 받지 않습니다.
간접 주소 지정 방식은 유효 주소가 저장된 주소를 저장합니다. 말이 조금 이상하죠...? 이게 무슨 말이냐면, 메모리에 유효 주소를 저장하고 유효 주소가 저장된 메모리의 주소를 저장한다는 의미입니다.
- 직접 주소 지정 방식 : 연산을 수행할 데이터가 저장된 위치(유효 주소)를 저장한다.
- 간접 주소 지정 방식 : 유효 주소가 저장된 메모리의 주소를 저장한다.
이 방식은 유효 주소가 저장된 메모리 접근 + 유효 주소가 가리키는 데이터가 저장된 메모리 접근, 총 2번을 메모리에 접근하므로 속도가 느립니다.
레지스터 주소 지정 방식이란 오퍼랜드 필드에 레지스터를 직접 명시하는 방식입니다. 레지스터란 CPU 내부에 존재하며, 메모리에 접근하는 것보다 속도가 빠릅니다. 따라서 메모리를 사용하는 직접 주소 지정 방식보다 속도가 빠릅니다. 그러나 오퍼랜드의 크기에 따라 레지스터 크기에 제약이 생깁니다.
레지스터 간접 주소 지정 방식이란 연산에 메모리 + 레지스터 조합으로 사용되는 방식입니다. 연산에 사용되는 데이터는 메모리에 저장하고, 해당 메모리를 가리키는 레지스터를 오퍼랜드에 저장합니다. 간접 주소 지정 방식과 달리 메모리에 1번만 접근하기 때문에 속도가 빠릅니다.