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

2023. 3. 10. 00:18기술 창고/CS 지식

728x90
SMALL

"무엇을 구현하고, 무엇을 수행하라"

 

명령어 구성

  • 연산 코드 + 오퍼랜드로 이루어져있다.
    • 연산 코드 == 명령어 (# CPU마다 연산 코드가 각자 다양하다. 아래에 적은 입출력제어까지의 연산코드 명령어는 고정적인 것이 아니다.)
      • 데이터 전송
        • MOVE : 데이터를 옮겨라
        • STORE : 메모리에 저장하라
        • LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라
        • PUSH : 스택에 데이터를 넣어라
        • POP : 스택의 최상단 데이터를 가져와라
      • 산술/논리 연산
        • ADD / SUBSTRACT / MULTIPLY / DIVIDE : 덧셈 / 뺄셈 / 곱셈 / 나눗셈
        • INCREMENT / DECREMENT : 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
        • AND / OR / NOT : and / or / not 연산을 수행하라
        • COMPARE : 두 개의 숫자 또는 TRUE / FALSE 값을 비교해라
      • 제어 흐름 변경
        • JUMP : 특정 주소로 실행 순서를 옮겨라
        • CONDITIONJUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라.
        • HALT : 프로그램의 실행을 멈춰라
        • CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라.
        • RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라
      • 입출력 제어
        • READ (INPUT) : 특정 입출력 장치로부터 데이터를 읽어라.
        • WRITE (OUTPUT) : 특정 입출력 장치로 데이터를 써라
        • START IO : 입출력 장치를 시작하라
        • TEST IO : 입출력 장치의 상태를 확인하라
    • 오퍼랜드 == 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치 (주소 필드)
      • 오퍼랜드는 없을 수도 있고 여러 개가 있을 수도 있다.

 

 

명령어 주소 지정 방식

  • 명령어는 연산코드 와 오퍼랜드로 이루어져있다.
    이 오퍼랜드에는 앞서 말했던 것처럼 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치 정보가 들어가있다고 했는데, 이 중에서 데이터가 저장된 위치 정보가 들어가있는 경우가 훨씬 많다.
    • 예) 명령어 전체 크기가 16비트이고 연산코드는 4비트, 나머지 12비트에 오퍼랜드가 균등하게 4비트씩 세 개가 부여되어있다면, 한 오퍼랜드 당 표현할 수 있는 데이터는 2의 4승. 즉, 16비트 크기의 데이터만 표현할 수 있다.
      따라서 표현하고자 하는 데이터가 16비트 이상이라면 표현할 수 없다.
      대용량의 저장 공간을 가진 주소에 해당 데이터가 주어져있고 데이터가 아닌 데이터가 저장된 위치 정보를 오퍼랜드에 저장시켜놓으면 그만큼 원하는 데이터를 호출할 수 있다.
  • 유효 주소
    • 연산에 사용할 데이터가 저장된 위치
  • 명령어 주소 지정 방식
    • 연산에 사용할 데이터가 저장된 위치를 찾는 방법
    • 유효 주소를 찾는 방법
    • 다양한 명령어 주소 지정 방식들
    • 즉시 주소 지정 방식
      • 연산에 사용될 데이터를 오퍼랜드 필드에 직접 명시
      • 가장 간단한 형태의 주소 지정 방식
      • 연산에 사용할 데이터의 크기가 작아질 수 있지만, 주소를 찾기위해 걸리는 자원 소모를 줄일 수 있고 빠르다.
       
    • 직접 주소 지정 방식
      • 오퍼랜드 필드에 유효 주소를 직접적으로 명시
      • 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어들 수 있다.
    • 간접 주소 지정 방식
      • 오퍼랜드 필드에 유효 주소의 주소를 명시
      • 다른 주소 지정 방식들에 비해 속도가 느리다.
    • 레지스터 주소 지정 방식
      • 연산에 사용할 데이터가 저장된 레지스터 명시
      • 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠르다.
      • 직접 주소 지정 방식과 유사하다.
        직접 주소 지정 방식은 메모리의 유효 주소를 명시하는 방법이고, 레지스터 주소 지정 방식은 레지스터의 유효 주소를 명시하는 방법이다.
        CPU 입장에서는 메모리에 접근하는 것보다 레지스터에 접근하는 것이 더욱 빠르기 때문에 속도 향상을 위해서는 레지스터를 이용하는 것이 좋을 수도 있다.
    • 레지스터 간접 주소 지정 방식
      • 연산에 사용할 데이터를 메모리에 저장
      • 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
      • 사용할 데이터를 메모리에 저장하고 메모리에 저장된 데이터의 위치 정보를 레지스터에 저장, 그리고 그 레지스터 유효 주소를 오퍼랜드에 저장하여 명시한다.

 

 

 

스택 (Stack)

  • 책을 쌓는 것과 같은 형식의 자료구조
  • LIFO (Last In First Out) : 가장 나중에 저장된 데이터가 가장 먼저 나온다.

 

큐 (Queue)

  • 통로에 들어가는 것과 같은 형식의 자료구조
  • FIFO (First In First Out) : 가장 먼저 저장된 데이터가 가장 먼저 나온다.

 

 

728x90
반응형
LIST