운영체제 (OS): 명령어

GreenBean·2023년 6월 2일
post-thumbnail

운영체제 (OS)

명령어

Inflearn: 혼자 공부하는 컴퓨터구조 + 운영체제

소스 코드와 명령어

고급 언어와 저급 언어

  • 고급 언어
    • 개발자가 이해하기 쉽게 만든 언어
  • 저급 언어
    • 컴퓨터가 이해하고 실행하는 언어
      • 기계어: 0 과 1 로 이루어진 명령어로 구성된 저급 언어
      • 어셈블리어: 0 과 1 로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어

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

  • 컴파일 언어
    • 컴파일 언어로 작성된 소스 코드는 컴파일러에 의해 저급 언어로 변환되고 ( 이 과정을 컴파일 이라고 합니다 ) 컴파일 결과로 저급 언어인 목적 코드 가 생성

  • 인터프리트 언어
    • 인터프리터에 의해 한 줄씩 실행
    • 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요 없음
  • 컴파일 언어 VS 인터프리트 언어


명령어의 구조

  • 무엇을 대상으로 무엇을 수행하라
    • 명령어는 연산 코드와 오퍼랜드로 구성
    • 기계어 ∙ 어셈블리어도 명령어

오퍼랜드

  • 연산에 사용될 데이터
    • 또는 연산에 사용될 데이터가 저장된 위치
    • 오퍼랜드가 담긴 공간을 주소 필드 라고 부르기도 한다

연산 코드

  • 수행할 연산
    • 담고 있는 내용은 CPU 마다 다름
    • 대부분의 전공 서적이 담고 있는 공통적인 연산 코드의 종류
      • ① 데이터 전송
      • ② 산술 / 논리 연산
      • ③ 제어 흐름 변경
      • ④ 입출력 제어

대표적인 연산 코드의 종류

  • 데이터 전송
    • MOVE: 데이터를 옮겨라
    • STORE: 메모리에 저장하라
    • LOAD ( FETCH ): 메모리에서 CPU 로 데이터를 옮겨라
    • PUSH: 스택에 데이터를 저장하라
    • POP: 스택의 최상단 데이터를 가져와라

Tip! 스택 ( Stack ) 과 큐 ( Queue )

  • 스택 ( Stack )
    • Last In First Out ( LIFO )
  • 큐 ( Queue )
    • FIrst In First Out( FIFO )
  • 산술 / 논리 연산
    • 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: 입출력 장치의 상태를 확인하라

명령어 주소 지정 방식

  • 유효 주소 ( Effective Address )
    • 연산에 사용할 데이터가 저장된 위치
  • 명령어 주소 지정 방식 ( Addressing Modes )
    • 연산에 사용할 데이터가 저장된 위치를 찾는 방법
    • 유효 주소를 찾는 방법
    • 다양한 명령어 주소 지정 방식들
  • 즉시 주소 지정 방식 ( Immediate Addressing Mode )
    • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
    • 가장 간단한 형태의 주소 지정 방식
    • 연산에 사용할 데이터의 크기가 작아질 수 있지만 빠름

  • 직접 주소 지정 방식 ( Direct Addressing Mode )
    • 오퍼랜드 필드에 유효 주소 직접적으로 명시
    • 유효 주소를 표현할 수 있은 크기가 연산 코드만큼 줄어듦

  • 간접 주소 지정 방식 ( Indirect Addressing Mode )
    • 오퍼랜드 필드에 유효 주소의 주소를 명시
    • 앞선 주소 지정 방식들에 비해 속도가 느림

  • 레지스터 주소 지정 방식 ( Register Addressing Mode )
    • 연산에 사용할 데이터가 저장된 레지스터 명시
    • 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름

  • 레지스터 간접 주소 지정 방식 ( Register Indirect Addresing Mode )
    • 연산에 사용할 데이터를 메모리에 저장
    • 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시


C 언어의 컴파일 과정

C 언어 컴파일 과정

  • 전처리기 ( Preprocessor )
    • 전처리 과정
      • 본격적으로 컴파일하기 전에 처리할 작업들
      • 외부에 선언된 다양한 소스 코드 ∙ 라이브러리 포함
        • e.g. #include
      • 프로그래밍의 편의를 위해 작성된 매크로 변환
        • e.g. #define
      • 컴파일할 영역 명시
        • e.g. #if ∙ #ifdef ∙∙∙

  • 컴파일 과정 ( Compiling )
    • 전처리가 완료 되어도 여전히 소스 코드
    • 전처리 완료된 소스 코드를 저급 언어 ( 어셈블리 언어 ) 로 변환

  • 어셈블 과정 ( Assembling )
    • 어셈블리어를 기계어로 변환
    • 목적 코드 ( Object File ) 를 포함하는 목적 파일이 됨

Tip! 목적 파일 VS 실행 파일

  • 목적 파일과 실행 파일은 둘 다 기계어로 이루어진 파일
  • But 목적 파일과 실행 파일은 다르다
  • 목적 파일은 링킹 ( Linking ) 을 거친 이후에야 실행 파일이 된다
  • 링킹 과정 ( Linking )

profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글