3.1 소스 코드와 명령어

고급 언어: 사람이 이해하고 작성하기 쉽게 만든 언어
저급 언어: 컴퓨터가 이해하고 실행할 수 있는 언어
기계어/어셈블리어: 0과 1로 이루어진 컴퓨터 언어를 사람이 읽기 편한 형태로 번역한 언어
컴파일 언어: 컴파일러가 소스 코드 전체를 변환해서 저급 언어로 실행되게끔 하는 언어
인터프리터 언어: 인터프리터가 소스 코드 한 줄씩 변환해서 저급 언어로 실행되게끔 하는 언어

고급 언어와 저급 언어

  • 컴퓨터는 C, C++, Java, Python 등 프로그래밍 언어(고급 언어)를 이해할 수 없기 때문에 컴퓨터가 이해할 수 있는 저급 언어로 변환해야 프로그램을 실행할 수 있다.
  • 사람 중심이기 때문에 고급이라고 하는 것 같다. 그건 맞지. 컴퓨터도 사람이 만들었으니
  • 0과 1로 이루어진, 컴퓨터만 이해할 수 있는 기계어(저급 언어)
  • 기계어를 그마나 사람이 읽을 수 있게 변환한 언어가 어셈블리어(얘도 저급)

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

  • 고급 언어를 저급 언어로 변환하는 대표적인 방식일 뿐, 프로그래밍 언어를 컴파일, 인터프리터로 명확하게 나누는 것은 잘못된 개념이다.
  • C는 대표적인 컴파일 언어
  • 코드 처음부터 끝까지 컴파일하면서 문제를 찾는다. 컴파일 시간이 걸리는 편
  • 오류가 하나라도 발생하면 컴파일 실패
  • Python이 대표적인 인터프리터 언어
  • 코드를 한 줄씩 실행하고 저급 언어로 변환한다. 컴파일 방식보다 더 느림
  • 변환 중 오류가 발생하더라도 오류 발생하기전 시점까지 코드는 실행함

3.2 명령어의 구조

명령어는 여산 코드와 오퍼랜드로 구성
연산코드: 명령어가 수행할 연산
오퍼랜드: 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치
주소 지정 방식: 연산에 사ㅛ할 데이터 위치를 찾는 방법

연산 코드와 오퍼랜드

  • 명령어는 수행할 명령어 코드와 연산에 사용할 데이터 또는 데이터 위치를 의미하는 오퍼랜드로 구성된다.
  • 연산 코드: 데이터 전송, 산술논리 연산, 제어 흐름 변경, 입출력 제어를 담당한다.
  • 오퍼랜드: 보통 데이터 그 자체 보다는 데이터가 저장된 위치인 메모리 주소나 레지스터 이름이 담겨있다. 그래서 주소 필드라고도 하며, 없거나 있거나 여러개 있을 수 있다.

주소 지정 방식

  • 오퍼랜드에 데이터가 아닌 주소를 담는 이유는 명령어 길이 때문이다.
  • 오퍼랜드 필드로 표현할 수 있는 정보 가짓수가 적기 때문에 주소를 담는다.
  • 유효 주소: 연산 코드에 사용할 데이터가 저장된 위치
  • 주소 지정 방식은 유효 주소를 찾는 방법

스택과 큐

  • 스택: 크레이프 맨 윗장부터 말아먹음
    First In Last Out. 가장 처음에 저장한 데이터를 가장 마지막에 빼냄
  • 큐: 크레이프 맨 밑장부터 말아먹음(..?)
    First In First Out. 가장 처음에 저장한 데이터를 가장 처음에 빼냄
profile
레오나의 기묘한 개발 일지

0개의 댓글