1. 소스 코드와 명령어

고급 언어와 저급 언어

  • 고급 언어 : 사람을 위한 언어
  • 저급 언어 : 컴퓨터가 이해하고 실행할 수 있는 언어 (명령어)
  • 고급언어로 작성된 소스코드가 실행되려면 반드시 저급 언어로 변환되어야 함
  • 저급 언어
    • 기계어 : 0, 1의 명령어 비트로 이루어진 언어(이진수 또는 16진수)
    • 어셈블리어 : 기계어를 읽기 편하게 변역한 언어
    • 임베디드, 게임, 정보보안 분야의 개발자
    • 어셈블리어를 읽으면 컴퓨터가 어떤 과정으로 프로그램을 실행하는지, 하나하나 추적/관찰할 수 있음

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

  • 고급언어가 저급 언어로 변환되는 과정
    • 컴파일 방식 : 컴파일러로 소스코드 전체를 저급 언어로 변환하는 방식
      • C언어가 대표적인 컴파일 언어
      • 컴파일러 : 컴파일을 수행해주는 도구
      • 오류가 하나라도 발견되면 컴파일에 실패함
    • 인터프리터 방식 : 인터프리터로 소스코드를 한 줄씩 저급 언어로 변환하는 방식
      • 파이썬이 대표적인 인터프리터 언어
      • 오류가 있는 줄에서 멈추기 때문에 이전 코드까지는 실행됨
    • 속도 : 인터프리터보다 컴파일이 더 빠름

목적 파일과 실행 파일

  • 목적 코드(객체 코드) : 컴퓨터가 이해하는 저급 언어
  • 실행 코드 : 목적 코드를 링킹한 코드
  • 링킹 : 외부 기능들을 연결짓는 과정

2. 명령어의 구조

연산 코드와 오퍼랜드

  • 연산 코드 : 명령어가 수행할 연산

    • 연산자
    • 연산 코드 필드라고 부름
    • 연산 코드의 유형
      • 데이터 전송
      • 산술/논리 연산
      • 제어 흐름 변경
      • 입출력 제어
  • 오퍼랜드 : 연산에 사용할 데이타 또는 연산에 사용할 데이터가 저장된 위치

    • 피연산자
    • 오퍼랜드 필드라고 부름
    • 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소를 담을 수 있다
    • 직접 명시하기 보다 데이터가 저장된 위치를 주로 담음
    • 주소 필드라고도 부름
    • 개수는 0개 이상
    • 오퍼랜드가 하나도 없으면 0-주소 명령어
  • 어셈블리어도 연산코드 + 오퍼랜드로 이루어져 있음

주소 지정 방식

  • 오퍼랜드 필드에 메모리/레지스터의 주소(또는 레지스터 이름)를 담는 이유 : 명령어 길이가 제한적이기 때문에 더 큰 용량의 데이터를 담기 위해서 주소를 사용한다
  • 유효 주소 : 데이터가 있는 위치
  1. 즉시 주소 지정 방식 : 데이터를 직접 명시하는 방법 (주소x)
  2. 직접 주소 지정 방식 : 유효 주소를 직접 명시하는 방법
    유효주소의 표현 범위에 제한이 있음
  3. 간접 주소 지정 방식 : 유효 주소의 주소를 명시하는 방법
    유효주소의 범위가 넓어졌지만 두 번의 메모리 접근이 필요해서 느림
  4. 레지스터 주소 지정 방식 : 데이터를 저장한 레지스터를 명시하는 방법
    CPU 내부에 레지스터가 있기 때문에 직접 방식보다 빠르고 레지스터 표현 범위에 제한이 있음
  5. 레지스터 간접 주소 지정 방식 : 데이터를 메모리에 저장하고 그 유효 주소를 레지스터에 저장하고 그 주소를 오퍼랜드 필드에 명시하는 방법
    메모리에 접근하는 횟수가 1번으로 줄어서 빠름
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글