1. CS - 컴퓨터 구조(5)

  1. 명령어의 구조?
    1. 무엇을 대상으로 무엇을 수행하라
    2. 연산코드와 오퍼랜드로 구성됨
    3. 수행할 연산, 실행 대상(연산에 사용될 데이터, 저장된 위치)
    4. 명령어 구조 연산코드 : 오퍼랜드
      1. ex1) 더해라 ⇒ 100과 ⇒ 120을!
      2. ex2) 빼라 ⇒ 메모리 32번지 안의 값과 ⇒ 메모리 35번지 안의 값을!
      3. ex3) 저장해라 ⇒ 10을 ⇒ 메모리 128번지에!
  2. 오퍼랜드?
    1. 연산에 사용될 데이터, 연산에 사용될 데이터가 저장된 위치를 말함(주소 필드)

    2. ex) mov eax, 0 → 오퍼랜드가 2개인 경우

         **pop rbp       → 오퍼랜드가 1개인 경우**
      
         **ret                → 오퍼랜드가 없는 경우**
      
    3. 연산코드만 있는경우 : 0주소 명령어라 불림

    4. 연산코드와 오퍼랜드가 1개있는 경우 : 1주소 명령어라 불림

    5. 연산코드와 오퍼랜드가 2개있는 경우 : 2주소 명령어라 불림

    6. 연산코드와 오퍼랜드가 3개있는 경우 : 3주소 명령어라 불림

  3. 연산코드?
    1. 수행할 연산을 말함
    2. 데이터 전송, 산술/논리연산, 제어 흐름 변경, 입출력 제어등이 있음
  4. 대표적인 연산 코드의 종류
    1. 데이터 전송
      1. MOVE : 데이터를 옮겨라는 의미
      2. STORE : 메모리에 저장하라는 의미
      3. LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져오라는 의미
      4. PUSH : 스택에 데이터를 저장하라는 의미
      5. POP : 스택의 최상단 데이터를 가져오라는 의미
    2. 산술/논리연산
      1. ADD/SUBTRACT/MULTIPLY/DIVIDE : 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 것
      2. INCREMENT/DECREMENT : 오퍼랜드에 1을 더하라, 오퍼랜드에 1을 빼라는 의미
      3. ADD/OR/NOT : AND/OR/NOT 연산자를 수행함
      4. COMPARE : 두 개의 숫자 or FALSE 값을 비교하는 것임
    3. 제어흐름변경
      1. JUMP : 특정 주소로 실행순서를 옯겨라는 의미
      2. CONDITIONALL JUMP : 조건에 부합할 때 특정 주소로 실행순서를 옯겨라는 의미
      3. HALT : 프로그램의 실행을 멈춰라는 의미
      4. CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행순서를 옮겨라는 의미
      5. RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라는 의미
    4. 입출력 제어
      1. READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라는 의미
      2. WRITE(OUTPUT) : 특정 입출력 장치로 데이터를 써라는 의미
      3. START IO : 입출력 장치를 시작하라는 의미
      4. TEST IO : 입출력 장치의 상태를 확인하라는 의미
  5. 명령어 주소 지정 방식?
    1. 주소 명령어에서 표현할 수 있는 데이터 크기의 한계가 있기 때문임!

    2. 오퍼랜드의 크기에 제약을 받지 않고 사용하기 위해서 사용될 데이터가 저장된 위치 주소필드를 이용하는 이유임!

      1. [표현]

        16-12[연산코드] : 12-8[10번지] : 8-4[오퍼랜드] : 4-0[오퍼랜드]

        → 원래라면 2^4(16) 밖에 표현이 안됌

        → 주소필드를 이용하면? **2^16(65,536)**를 표현할 수 있음!

    3. 유효주소(Effective Address)

      1. 연산에 사용할 데이터가 저장된 위치를 말함
    4. 명령어 주소 지정 방식(Addressing Modes)

      1. 연산에 사용할 데이터가 저장된 위치를 찾는 방법임
      2. 유효주소를 찾는 방법임
      3. 다양한 명령어 주소 지정 방식들이 있음
    5. 즉시 주소 지정 방식(Immediate Addressing Mode)

      1. 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시함
      2. 가장 간단한 형태의 주소 지정 방식임
      3. 연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름
      4. ex) 연산 코드 : 연산에 사용할 데이터
    6. 직접 주소 지정 방식(Direct Addressing Mode)

      1. 오퍼랜드 필드에 유효주소 직접적으로 명시함
      2. 유효주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦
    7. 간접 주소 지정 방식(Indirect Addressing Mode)

      1. 오퍼랜드 필드에 유효주소의 주소를 명시함
      2. 앞선 주소 지정방식들에 비해 속도가 느림
    8. 레지스터 주소 지정 방식(Register Addressing Mode)

      1. 연산에 사용할 데이터가 저장된 레지스터 명시함
      2. 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름