[cs] 명령어

문돌이 개발자·2023년 9월 19일
0

고급언어와 저급언어

고급언어

  • 개발자가 작성하는 소스코드는 기계가 이해할 수 없다.
  • 기계가 이해할 수 있는 저급언어로 변환하는 과정을 거쳐야 컴퓨터가 코드를 실행할 수 있다.

저급언어

  • 기계어는 0과 1의 명령어 비트로 이루어진 언어
  • 어셈블리어는 기계어를 읽기 편한 형태로 번역한 언어

컴파일과 인터프리트

  • 고급 언어를 저급언어로 변환하는 방법

컴파일

  • 고급언어(컴파일 언어)로 작성된 소스코드 전체를 컴파일러가 저급언어로 변환하는 과정
  • 컴파일을 통해 생성된 저급언어로 변환된 코드를 목적 코드라고 한다.
  • 소스코드에 문제가 있을 시 컴파일 에러가 발생하여 소스코드 전체를 실행할 수 없다.

인터프리트

  • 고급언어(인터프리터 언어)로 작성된 소스코드를 한줄씩 인터프리터가 저급언어로 변환하여 실행한다.
  • 실행 도중 오류가 있으면 에러가 발생한다.
  • 컴파일 방식에 비해 느리다.

Java는 컴파일 언어? 인터프리터 언어?
참고:
[java] Java는 컴파일 언어인가 인터프리터 언어인가

목적파일과 실행파일

  • 목적 코드를 목적파일이라고도 한다.
  • 목적 코드를 컴퓨터가 실행하려면 링킹이라는 작업을 통해 실행파일로 변환되어야 한다.

Build란?

  • compile이란 인간이 작성한 소스코드를 기계가 읽을 수 있도록 바이너리형태의 오브젝트 파일로 만들어 주는 것
  • 오브젝트 파일을 실행하기 위해서 다른 리소스를 사용하게 되는데 이러한 리소스와 오브젝트 파일(.class)을 연결하는 과정을 링크라고 한다. 자바의 경우 런타임에 필요한 클래스들이 자바 가상머신에 링크되고 클래스로더가 동적으로 클래스를 로딩하여 실행파일(.jar)파일을 생성한다.
  • 소스코드를 컴파일 하여 오브젝트 파일을 만들고 이를 실행파일을 생성하기 위해 필요한 리소스들과 링크하여 실행파일을 생성하는 과정을 빌드라고 한다.

참고:

빌드란

연산코드와 오퍼랜드

  • 명령어는 연산코드와 오퍼랜드로 구성되어 있다.

연산코드

  • 명령어가 수행할 연산
  • 연산자라고도 한다.

오퍼랜드

  • 연산에 사용할 데이터가 저장된 위치
  • 피연산자라고도 한다.

연산코드의 유형

  • 데이터 전송
  • 산술/논리 연산
  • 제어 흐름 변경
  • 입출력 제어

주소 지정 방식

오퍼랜드 필드에 직접 데이터가 담기는 것이 아니라 데이터가 존재하는 메모리나 레지스터의 주소가 담기는 이유는 표현할 수 있는 데이터의 크기가 커지기 때문이다.

즉시 주소 지정 방식

  • 오퍼랜드에 연산에 사용할 데이터를 직접 명시하는 방식이다.
  • 표현할 수 있는 데이터의 크기가 작아지지만 피연산자에 바로 접근할 수 있으므로 속도가 빠르다.

직접 주소 지정 방식

  • 오퍼랜드에 연산에 사용할 데이터를 저장한 메모리 주소를 명시하는 방식이다.
  • 즉시 주소 지정 방식에 비해 데이터를 표현할 수 있는 비트를 온전히 확보할 수 있다. 하지만 유효주소를 표현할 수 있는 크기가 연산 코드에 의해 작아져 있다.

간접 주소 지정 방식

  • 오퍼랜드에 연산에 사용할 데이터를 저장한 유효주소를 저장한 주소를 명시하는 방식이다.
  • 유효주소를 표현할 수 있는 비트의 크기를 온전히 확보했지만 메모리를 두번 거쳐서 데이터에 접근할 수 있기 때문에 속도가 느리다.

레지스터 주소 지정 방식

  • 데이터가 레지스터에 저장되어 있어 레지스터 주소를 오퍼랜드에 명시하는 방식이다.
  • 표현할 수 있는 레지스터 크기에 제한이 생길 수 있다.

레지스터 간접 주소 지정 방식

  • 데이터가 저장된 유효주소가 레지스터에 저장되어 있어 해당 주소를 오퍼랜드에 명시하는 방식이다.
  • 메모리에 접근하는 것보다 레지스터에 접근하는 것이 더 빠르기 때문에 간접 주소 지정 방식보다 빠르다.
profile
까먹고 다시 보려고 남기는 기록

0개의 댓글