[OS] ch03 명령어

@NongDamGom · July 29, 2023 · 4 min read

소스 코드와 명령어

고급 언어와 저급 언어

프로그래밍 언어에서의 소스 코드는 컴퓨터 내부에서 명령어로 변환

소스 코드처럼 사람을 위해 만들어진 언어를 고급 언어, 컴퓨터가 이해하는 언어를 저급 언어라고 함

저급 언어에는 두 종류가 있다

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

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

고급 언어가 저급 언어로 변환되는 방식

  • 컴파일: 컴파일러에 의해, 컴파일 언어(고급 언어)가 목적 코드(저급 언어)로 변환되는 과정
  • 인터프리터: 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 방식

컴파일은 소스 코드 전체가 변환되지만 인터프리터는 한 줄씩 차례대로 실행한다

따라서 컴파일은 소스 코드 전체에 오류가 하나라도 있으면 에러가 발생하지만, 인터프리터는 오류가 있는 줄에 도달하기 전까지는 정상적으로 수행된다

컴파일이 인터프리터보다 빠르다!

목적 파일 vs 실행 파일

링킹: 목적 파일이 실행 파일(.exe, .o 등등)으로 변환되는 과정

목적 코드가 여러 개 있을 때 서로의 기능을 연결 짓는 작업을 수행한다

명령어의 구조

연산 코드와 오퍼랜드

오퍼랜드: 연산에 사용할 데이터 or 데이터의 주소 (=피연산자)

오퍼랜드의 개수가 N인 명령어를 N-주소 명령어라고 칭한다

연산 코드: 명령어가 수행할 연산 (=연산자)

연산 코드의 유형에는 아래 네 개가 있다

  1. 데이터 전송
  2. 산술/논리 연산
  3. 제어 흐름 변경: 실행 순서 제어, CALL과 RETURN이 속함
  4. 입출력 제어

주소 지정 방식

유효 주소(피연산 데이터의 주소)를 찾는 방법

  1. 즉시 주소 지정 방식: 연산에 사용할 데이터를 직접 명시

표현할 수 있는 데이터의 크기가 작아지지만 속도가 빠르다

  1. 직접 주소 지정 방식: 유효 주소를 직접 명시

표현할 수 있는 데이터의 크기는 즉시 주소 지정 방식보다 크지만 여전히 오퍼랜드 표현 범위가 연산 코드의 비트 수에 영향을 받는다

  1. 간접 주소 지정 방식: 유효 주소의 주소를 명시

표현할 수 있는 범위가 넓어졌으나 두 번의 메모리 접근이 필요해서 상대적으로 느리다

  1. 레지스터 주소 지정 방식: 연산에 사용할 데이터를 저장한 레지스터를 직접 명시

표현할 수 있는 레지스터의 크기에 제한이 생기지만 속도가 빠르다

  1. 레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 명시

간접 주소 지정 방식과 유사하지만 메모리 접근 횟수가 한 번으로 줄어들어서 좀 더 빠르다

@NongDamGom
개발하는 농담곰