Operand와 Operation Code로 구성된다.
Operation Code는 그 명령어가 수행할 연산을 나타내며 연산자 라고도 하고, Operand는 연산에 사용할 데이터 혹은 그 데이터가 저장된 위치를 나타내며 피연산자 라고도 한다.
Operand는 연산에 사용하는 데이터 혹은 그 주소를 저장하는데, 명령어의 특정한 크기 중 Operand field에서 그 값이 담기고 Operand의 갯수에 따라 0 - 주소 명령어, 1 - 주소 명령어, 2 - 주소 명령어, 3 - 주소 명령어 등이 있다.
Operation Code는 명령어가 수행할 연산을 의미하며 CPU에 따라 종류가 다르고 종류가 매우 많다.
범용적으로 CPU에서 사용하는 종류는 아래와 같다.
명령어의 Operand field에 메모리나 레지스터의 주소를 담는 경우가 많은데 그 이유는 Operand field는 제한이 있고, Operand의 수에 따라 한번에 담을 수 있는 데이터의 양이 더 작아지기 때문에 메모리 혹은 레지스터의 주소를 담으면 그 주소만큼 데이터를 사용할 수 있기 때문이다.
Operand field에 데이터의 위치를 명시할 때, 그 위치를 찾는 방법을 주소 지정 방식(addressing mode) 라 하고 그 종류는 아래와 같다.
연산에 사용할 데이터를 직접 명시하는 방식.
가장 간단한 형태이며 표현할 수 있는 데이터가 작아지는 단점이 있지만, 그만큼 연산에 사용할 데이터를 찾는 과정이 없기 때문에 다른 방식보다 빠르다.
연산에 사용할 데이터가 어느 메모리에 저장되어 있는지 그 주소(유효 주소)를 직접 명시하는 방식.
표현할 수 있는 데이터의 크기는 즉시 주소 지정보다 더 크지만, 여전히 유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수로 한정이 된다.
즉, 표현 가능한 유효 주소에 제한이 있다.
유효 주소를 저장한 메모리의 주소를 명시.
직접 주소 지정보다 표현 가능한 범위가 넓어지지만 메모리에 2번 접근해야 하기 때문에 앞선 방식보다는 느린 방식이다.
연산에 사용할 데이터를 저장한 레지스터를 직접 명시하는 방식.
일반적으로 CPU 외부에 있는 메모리에 접근하는 것 보다 CPU 내부에 있는 레지스터의 접근이 더 빠르기 때문에, 레지스터 주소 지정은 직접 주소 지정보다 빠르지만 직접 주소 지정과 비슷한 문제를 공유한다.
연산에 사용할 데이터를 메모리에 저장하고, 그 유효주소를 저장한 레지스터를 명시하는 방식.
유효 주소를 찾는 과정이 간접 주소 지정과 비슷하지만, 메모리보다 레지스터의 접근하는 것이 더 빠르고 메모리에 접근하는 횟수가 1회로 줄어든다는 차이가 있다.
레지스터 간접 주소 지정은 간접 주소 지정보다 빠르다는 장점이 있다.
외에는 후에 설명한다.