💻 명령어

profile image 스이연 2025. 2. 10. 00:34

 

소스코드와 명령어

고급언어와 저급 언어

  • 고급언어
    • 사람을 위한 언어
    • 프로그래밍 언어
  • 저급언어
    • 컴퓨터가 직접 이해하고 실행할 수 있는 언어
    • 기계어
      • 0과 1의 명령어 비트로 이루어진 언어
    • 어셈블리어
      • 기계어를 읽기 편한 형태로 번역한 언어
        • 0101 0101 → push rbp
  • 고급언어로 작성된 소스 코드가 실행되려면 반드시 저급 언어(명령어) 로 실행 되어야한다.

컴파일 언어와 인터프리터 언어

  • 고급언어
    • 컴파일언어
      • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
      • 대표 컴파일 언어는 C언어
      • 컴파일
        • 컴파일 언어로 작성된 소스코드는 코드 전체가 저급 언어로 변환되는 과정
      • 컴파일러
        • 컴파일을 수행해 주는 도구
      • 목적코드(object code)
        • 컴파일러를 통해 저급 언어로 변환된 코드
    • 인터프리터 언어
      • 인터프리터에 의해 소스코드가 한 줄씩 실행되는 고급 언어
      • 대표 인터프리터 언어는 python
      • 인터프리터
        • 소스코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구
  • 목적파일과 실행파일
    • 목적 파일
      • 목적 코드로 이루어진 파일
      • 목적 코드가 실행 파일이 되려면 링킹이라는 작업을 가져야 함
        • 링킹
          • 어떤 목적 코드와 다른 목적 코드를 연결 하는 작업
    • 실행 파일
      • 실행 코드로 이루어진 파일
      • 윈도우의 .exe 확장자를 가진 파일

명령어의 구조

연산 코드와 오퍼랜드

  • 명령어
    • 연산 코드 (operation code)
      • 명령어가 수행할 연산
      • 연산 코드 필드 : 연산 코드가 담기는 영역
      • 연산 코드 유형
        • 데이터 전송
          • 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 : 특정 주소로 실행 순서를 옮겨라
          • CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
          • HALT : 프로그램의 실행을 멈춰라
          • CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
          • RETURN : CALL 을 호출할 때 저장했던 주소로 돌아가라
        • 입출력 제어
          • READ (INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
          • WRITE (OUTPUT) : 특정 입출력 장치로 데이터를 써라
          • START IO : 입출력 장치를 시작하라
          • TEST IO : 입출력 장치의 상태를 확인하라
    • 오퍼랜드 (operand)
      • 연산에 사용할 데이터가 저장된 위치
      • 오퍼랜드 필드 (주소 필드)
        • 오퍼랜드가 담기는 영역
        • 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 온다.
        • 많은 경우 사용할 데이터가 저장된 위치 (메모리 주소, 레지스터 이름) 이 담김.
      • 0-주소 명령어
        • 오퍼랜드가 하나도 없는 명령어
      • 1-주소 명령어
        • 오퍼랜드가 하나인 명령어
      • 2-주소 명령어
        • 오퍼랜드가 두개인 명령어
      • 3-주소 명령어
        • 오퍼랜드가 세개인 명령어

주소 지정 방식

  • 유효 주소 (effective address)
    • 연산의 대상이 되는 데이터가 저장된 위치
  • 주소 지정 방식
    • 오퍼랜드 필드에 데이터가 저장된 위치를 명시 할 때 연산에 사용할 데이터 위치를 찾는 방법
    • 유효 주소를 찾는 방법
    • 대표적인 주소 지정 방식
      • 즉시 주소 지정 방식
        • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
        • 데이터의 크기가 작아진다는 단점이 있음
        • 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없기 때문에 빠르다.
      • 직접 주소 지정 방식
        • 오프랜드 필드에 유효 주소를 직접적으로 명시하는 방식
      • 간접 주소 지정 방식
        • 유효 주소의 주소를 오퍼랜드 필드에 명시
        • 두번의 메모리 접근이 필요하기 때문에 느린 방식.
      • 레지스터 주소 지정 방식
        • 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법
        • 메모리에 접근하는 것보다 레지스터에 접근하는 것이 더 빠름
        • 표현할 수 있는 레지스터 크기에 제한이 생김
      • 레지스터 간접 주소 지정 방식
        • 연산에 사용할 데이터를 메모리에 저장하고 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
        • 메모리 접근 횟수가 한번으로 줄어들기 때문에 간접 주소 지정 방식보다 빠르다
  • 스택과 큐
    • 스택
      • 한쪽 끝이 막혀있는 통과 같은 저장공간
      • 데이터를 저장할때는 차곡 차곡 저장하고 자료를 빼낼 때는 마지막으로 데이터부터 뺀다
      • LIFO 방식 (후입선출)
      • PUSH : 스택에 데이터를 저장하는 명령어
      • POP : 스택에 저장된 데이터를 꺼내는 명령어

    • - 스택과는 달리 양쪽이 뚫려 있는 통과 같은 저장공간
      - 한쪽으로 데이터 저장하고 다른 한쪽으로는 먼저 저장한 순서대로 데이터를 뺀다.
      - FIFO 방식 (선입선출)
참고 자료
혼자 공부하는 컴퓨터구조 + 운영체제

 

 

'CS > Computer Architecture' 카테고리의 다른 글

💻 메모리와 캐시 메모리  (0) 2025.02.11
💻 CPU 성능 향상 기법  (0) 2025.02.11
💻 CPU의 작동 원리  (0) 2025.02.11
💻 데이터  (0) 2025.02.10
💻 컴퓨터 구조의 기초  (0) 2025.02.10