연산코드와 오퍼랜드


명령어는 연산코드 + 오퍼랜드로 구성되어 있다.

연산코드

명령어가 수행할 연산(연산자)

연산 코드의 종류는 아래와 같다.

  • 데이터 전송
  • 산술/논리 연산
  • 제어 흐름 변경
  • 입출력 제어

오퍼랜드

연산에 사용될 데이터가 저장된 위치(피연산자)

연산에 사용될 데이터의 주소가 저장되기도 하여 주소 필드라고도 한다

오퍼랜드가 하나도 없는 경우 0-주소 명령어
오퍼랜드가 하나인 명령어를 1-주소 명령어
...
오퍼랜드가 세 개인 명령어를 3-주소 명령어라고 한다.

주소 지정 방식


오퍼랜드에 연산할 데이터를 직접 담을 수 있으나 그러면 오퍼랜드에 데이터를 담는데 공간적 한계가 올 수 있다.

예시로 명령어의 크기를 16비트로 제한된다고 가정하면

연산 코드의 크기가 4비트라면 오퍼 랜드를 저장할 수 있는 크기는 12비트 정도가 될 수 있다.

그렇다면 오퍼랜드에 저장될 데이터의 개수가 늘어난다면 오퍼랜드 하나당 저장할 수 있는 데이터의 크기는 12/n 비트로 줄어들 것이다.

만약 오퍼랜드에 값이 큰 값을 저장해야 한다면? 저장해야 하는 데이터 개수를 줄이거나 아예 그 데이터 조차 저장할 수 없을 것이다.

그러나 만약 오퍼랜드에 데이터의 주소를 저장한다면 더 많은 데이터를 저장할 수 있다.

이를 주소 지정 방식이라고 한다.

즉시 주소 지정 방식

연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방법

직접 주소 지정 방식

오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방법, 즉시 주소 지정 방식보단 오퍼랜드 필드에 표현할 수 있는 데이터의 크기가 늘긴 늘었으나 결국에는 저장할 수 있는 유효 주소 제한이 있다.

간접 주소 지정 방식

유효 주소의 주소를 오퍼랜드 필드에 명시하는 방법, 이전보다는 저장할 수 있는 데이터의 수가 늘었으나 메모리를 두번 접근해야 하다보니 속도가 느려진다.

레지스터 주소 지정 방식

데이터를 저장한 레지스터 주소를 필드에 직접 명시, 외부의 메모리를 접근하는 것보단 속도가 빠르나 직접 주소 지정 방식과 비슷한 문제를 공유한다.

레지스터 간접 주소 지정 방식

연산에 사용할 데이터는 메모리에 저장하고 그 주소(유효 주소)를 저장한 레지스터 주소를 오퍼랜드에 명시하는 방법이다.

간접 주소 지정 방식과 비슷하나 메모리를 두 번 방문하는 것과 달리 레지스터를 통해 속도를 높일 수 있다.

profile
어쩌다보니 개발하게 된 구황작물

0개의 댓글