[컴퓨터 구조] 명령어의 구조

기계어어셈블리어를 이루는 명령어의 구조

연산 코드와 오퍼랜드

명령어는 연산 코드오퍼랜드로 구성
연산 코드가 담기는 영역을 연산 코드 필드라 하고, 오퍼랜드가 담기는 영역을 오퍼랜드 필드라 함

op

연산 코드 (연산자)

  • 명령어가 수행할 연산
  • CPU마다 종류와 생김새가 다름

유형

데이터 전송
  • MOVE - 데이터를 옮겨라
  • STORE - 메모리에 저장하라
  • LOAD(FETCH) - 메모리에서 CPU로 데이터를 가져와라
  • PUSH - 스택에 데이터를 저장하라
  • POP - 스택의 최상단 데이터를 가져와라
산술/논리 연산
  • ADD / SUBTRACT / MULTIPLY / DIVIDE - 덧셈 / 뺄셈 / 곱셈 / 나눗셈을 수행하라
  • INCREMENT / DECREMENT - 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
  • AND / OR / NOT - AND / OR / NOT 연산을 수행하라
  • COMPARE - 두 개의 숫자 또는 TRUE / FALSE 값을 비교하라
제어 흐름 변경
  • JUMP - 특정 주소로 실행 순서를 옮겨라
  • CONDITIONAL JUMP - 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
  • HALT - 프로그램의 실행을 멈춰라
  • CALL - 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
  • RETURN - CALL을 호출할 때 저장했던 주소로 돌아가라
입출력 제어
  • READ(INPUT) - 특정 입출력 장치로부터 데이터를 읽어라
  • WRITE(OUTPUT) - 특정 입출력 장치로 데이터를 써라
  • START IO - 입출력 장치를 시작하라
  • TEST IO - 입출력 장치의 상태를 확인하라

오퍼랜드 (피연산자)

  • 연산에 사용할 데이터 또는 위치(주소)
  • 숫자문자 등을 나타내는 데이터 또는 메모리레지스터 주소가 올 수 있음
  • 주소 필드라고 부르기도 함
  • 명령어 안에 하나도 없을 수도 있고 어려개가 있을 수도 있음
  • 오퍼랜드 개수(n)에 따라 n-주소 명령어라고 함
    • 0-주소 명령어, 1-주소 명령어, 2-주소 명령어, 3-주소 명령어

주소 지정 방식

연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식이라고 합니다. 다양한 주소 지정 방식이 존재하며, 이는 프로그램이 메모리에서 데이터를 가져오거나 저장하는 방식을 결정합니다.

주소 지정 방식은 프로세서의 아키텍처에 따라 다양하며, 프로그래머는 적절한 방식을 선택하여 효율적인 연산을 수행할 수 있습니다.

데이터가 아니라 위치를 담는 이유

오퍼랜드 개수가 많을수록 오퍼랜드 필드의 길이가 작아지기 때문에 하나의 필드에서 표현할 수 있는 정보의 가짓수가 적음
하지만 오퍼랜드 필드에 데이터가 아니라 주소가 담긴다면 표현할 수 있는 데이터는 해당 메모리 주소에 저장할 수 있는 공간만큼 커짐

방식

즉시 주소 지정 방식 (Immediate Addressing)

오퍼랜드 필드에 직접 데이터 값을 넣는 방식입니다. 이는 연산에 필요한 상수 값을 명령어에 포함시키는 방법으로, 명령어와 함께 데이터가 저장됩니다.

직접 주소 지정 방식 (Direct Addressing)

오퍼랜드 필드에 실제 데이터가 저장된 메모리 주소를 넣는 방식입니다. 명령어는 해당 메모리 주소에 있는 데이터를 사용하여 연산을 수행합니다.

간접 주소 지정 방식 (Indirect Addressing)

오퍼랜드 필드에 실제 데이터가 저장된 메모리 주소를 넣는 것이 아니라, 그 메모리 주소에 저장된 값이 또 다른 메모리 주소를 가리키는 방식입니다. 이렇게 함으로써 데이터를 간접적으로 참조하게 됩니다.

레지스터 주소 지정 방식 (Register Addressing)

오퍼랜드 필드에 레지스터의 번호나 이름을 사용하는 방식입니다. 연산에 필요한 데이터는 레지스터에 미리 저장되어 있어야 합니다.

레지스터 간접 주소 지정 방식 (Register Indirect Addressing)

간접 주소 지정 방식과 비슷하지만, 오퍼랜드 필드에 레지스터의 번호나 이름을 사용하여 간접 참조하는 방식입니다. 레지스터에 저장된 메모리 주소가 가리키는 데이터를 사용합니다.

댓글남기기