CS notes/CA

[CA] 명령어

느낌있는 곳 2024. 4. 10. 11:56

고급언어 & 저급언어

  • 고급언어
    - 사람을 위한 언어
    - 대부분의 프로그래밍 언어
  • 저급언어
    - 컴퓨터가 직접 이해하고 실행할 수 있는 언어
    - 고급언어 저급언어 변환이 되어야 실행될 수 있음
    - 기계어 (0과 1의 명령어 비트로 이루어진 언어)
    - 어셈블리어 (기계어를 읽기 편한 형태로 번역한 언어)
  • 어떤 개발자가 되고 싶은지에 따라 중요성이 달라짐
    - 임베디드, 게임, 정보 보안 관련 개발자는 어셈블리어를 배울 필요가 있음

 

컴파일 언어

  • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급언어
  • 컴파일 - 저급 언어로 변환하는 과정
  • 컴파일러 - 컴파일을 수행하는 도구
  • 목적 코드 - 컴파일러를 통해 저급 언어로 변환된 코드
  • 처음부터 끝까지 오류가 하나라도 있다면 컴파일에 실패하게됨
  • 대표적으로 C언어가 있음

 

인터프리터 언어

  • 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급언어
  • 인터프리터 - 코드를 한 줄씩 저급언어로 변환하여 실행해주는 도구
  • N번째 줄에 문법오류가 있더라도 N-1번째 줄까지는 올바르게 수행된다
  • 대표적으로 Python이 있음

 

 

목적 파일 & 실행 파일

  • 목적 파일
    - 목적 코드로 이루어진 파일
  • 실행 파일
    - 실행 코드로 이루어진 파일
    - .exe파일이 대표적인 실행파일
  • 링킹
    - 목적 코드 실행 파일이 되기 위해 거치는 작업
    - 외부 기능을 연결지어 완전한 실행파일을 만드는 것

 

명령어의 구조

연산 코드 (연산자)

  • 명령어가 수행할 연산을 의미
  • 데이터 전송
    MOVE, STORE, LOAD, PUSH, POP
  • 산술/논리 연산
    ADD, SUBTRACT, MULTIFLY, DIVIDE, INCREMENT, DECREMENT, AND, OR, COMPARE
  • 제어 흐름 변경
    JUMP, HALT, CALL, RETURN
  • 입출력 제어
    READ, WRITE, START IO, TEST IO

 

오퍼랜드 (피연산자)

  • 연산에 사용할 데이터 or 데이터 저장 위치
  • 주소 필드 = 메모리 주소 or 레지스터 이름이 담긴다
  • 오퍼랜드의 개수  ➜ 0-주소 명령어 ~ 3-주소 명령어

 

주소 지정 방식

  • 즉시 주소 지정 방식
    - 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
    - 다른 주소 지정 방식에 비해서 빠름
  • 직접 주소 지정 방식
    - 오퍼랜드 필드에 유효 주소를 직접적으로 명시
    - 표현할 수 있는 오퍼랜드의 길이가 연산 코드의 길이만큼 짦아짐
    - 표현할 수 있는 유효 주소에 제한이 생길 수 있음
  • 간접 주소 지정 방식
    - 직접 방식에 비해 표현 가능한 유효 주소의 범위가 더 넓어짐
    - 2번의 메모리 접근이 필요하여 속도가 느린편
  • 레지스터 주소 지정 방식
    - 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
    - 표현할 수 있는 레지스터 크기에 제한이 생길 수 있음
  • 레지스터 간접 주소 지정 방식
    - 연산에 사용할 데이터를 메모리에 저장하고, 그 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
    - 간접과 유사한 방식이지만 접근하는 횟수가 1번임