■ 명령어 구조
명령어는 '무엇을 대상'으로 '어떤 작동'을 해야하는 지에 관한 데이터들이 내포되어 있다.
이를 아래와 같이 표현할 수 있다.
위 예시에서 노란색 배경은 '더해라'의 동작을 담고 있다. 이러한 동작을 담고있는 영역을 '연산 코드 (Operation Code)'라고 칭하고 하얀색 배경에는 피연산자의 데이터가 들어가있다. 이와 같이 연산에 사용되어지는 데이터 혹은 데이터가 존재하는 주소값을 저장하고 있는 영역을 '오퍼랜드 (Operand)'라고 한다.
※ 즉, 명령어는 아래와 같이 '연산 코드'와 '오퍼랜드 필드'로 구성 되어진다.
오퍼랜드 필드는 '연산에 사용될 데이터' 혹은 '그 데이터가 저장된 위치'를 의미한다고 했다. 다만, 오퍼랜드 필드에는 데이터가 직접적으로 명시되기 보다는 데이터가 저장된 위치, 즉 주소값이나 레지스터 이름이 주로 담긴다. 이러한 이유 때문에 오퍼랜드필드를 '주소 필드 (Address Field)'라고도 일컫는다.
※ 데이터를 직접 명시하지 않는 이유는 차후 설명됨
이러한 오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 한 두개 혹은 세 개 등 여러 개가 존재할 수 있다.
이와 같이 명령어 안에 오퍼랜드의 개수에 따라서 명령어를 일컫는 단어가 나뉘게 된다.
[오퍼랜드 필드에 따른 명령어 종류]
(1) 0-주소 명령어 [오퍼랜드가 없음]
(2) 1-주소 명령어 [오퍼랜드가 한 개 있음]
(3) 2-주소 명령어 [오퍼랜드가 두 개 있음]
(4) 3-주소 명령어 [오퍼랜드가 세 개 있음]
■ 주소 지정 방식
이를 설명하기에 앞서 궁금한 점이 생겼었다. 왜 주소필드에는 메모리를 직접적으로 명시하지 않고 데이터가 저장된 메모리 주소 값을 담는 경우가 대다수일까?
그에 대한 대답은 '한정된 명령어 길이' 때문이다.
가령 하나의 명령어가 n비트로 구성되어 있으며, 그중 연산 코드 필드가 m비트라고 가정했을 때 주소필드에 가장 많은 공간을 할당할 수 있는 1주소명령어 조차도 'n-m' 비트 밖에 할당해줄 수가 없다.
예로 명령어 크기가 16비트라고 가정하고 연산 코드 필드가 4비트인 3-주소 명령어에서는 오퍼랜드 필드당 4비트 정도만 할당되어진다. 이 경우 아래와 같이 하나의 주소 필드당 표현할 수 있는 정보의 개수는 2^4개 밖에 안된다.
하지만, 오퍼랜드에 직접적으로 데이터를 명시하지 않고 메모리 주소를 지정할 수 있다면? 그리고 그 메모리 한 칸이 64비트의 정보를 표현할 수 있다면?
아래와 같이 한 칸의 오퍼랜드가 표현할 수 있는 데이터의 크기가 월등히 높아진다.
이와 같이 주소 필드에 실 데이터가 아니라 주소를 집어 넣어 표현하는 방식을 '주소 지정 방식 (Addressing Mode)'라고 한다.
대표적인 주소 지정 방식은 다섯 가지가 있다.
방식 | 설명 |
즉시 주소 지정 방식 | 실데이터를 주소 필드에 직접적으로 명시하는 방식이다. 표현할 수 있는 데이터의 크기가 매우 작다는 단점이 있지만, 연산에 사용할 데이터를 찾는 과정이 없기 때문에 모든 주소 지정 방식 중 가장 빠르다는 장점이 있음. |
직접 주소 지정 방식 | 주소 필드에 유효주소를 명시하는 방법이다. 하지만 여전히 유효 주소를 표현할 수 있는 범위가 연산 코드(4bit) 만큼 줄어들어 있기 때문에 유효 주소를 표현하는데에 일부 제약이 있을 수 있다. |
간접 주소 지정 방식 | 주소필드에 유효 주소의 주소를 명시하는 방법이다. 직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 더 넓어졌다. (2^4 -> 2^64) 하지만, 메모리 접근을 두 번 해야하므로 속도가 일반적으로 느리다. |
레지스터 주소 지정 방식 | 직접 주소 지정 방식과 비슷하지만, 메모리 주소가 아니라 데이터가 저장된 레지스터를 명시하는 방식이다. CPU 외부에 있는 메모리에 접근하는 속도보다 CPU 내부에 있는 레지스터에 접근하는 속도가 월등히 빠르다. 다만, 표현할 수 있는 레지스터의 크기에 제한이 있다. |
레지스터 간접 주소 지정 방식 | 연산에 사용할 데이터를 메모리(Memory)에 저장하고, 그 유효 주소를 저장한 레지스터를 주소 필드에 명시하는 방법이다. 간접 주소 지정 방식과 비슷하지만, 메모리 접근 횟수가 2회에서 1회로 줄어든다는 점에서 속도가 더 빠르다는 장점이 있다. |
* 유효주소 (Effective Address) 연산의 대상이 되는 데이터가 저장이 되어있는 위치 |
'Computer Science > Computer Architecture' 카테고리의 다른 글
[컴퓨터 구조] 명령어 사이클, 인터럽트 (2) | 2024.10.02 |
---|---|
[컴퓨터 구조] 레지스터 (Register) (2) | 2024.09.17 |
[컴퓨터 구조] ALU, 제어 장치 (0) | 2024.09.17 |
[컴퓨터 구조] 고급언어와 저급언어 (0) | 2024.08.25 |
[컴퓨터 구조] 0과 1로 표현하는 문자 (0) | 2024.08.25 |