[혼공컴운] ch.3 명령어

제트·2024년 7월 7일
0

3-1. 소스 코드와 명령어

1. 고급 언어와 저급 언어

  • 고급 언어 : 사람을 위한 언어

  • 저급 언어 : 컴퓨터가 직접 이해하고 실행할 수 있는 언어

    • 컴퓨터가 이해하고 실행할 수 있는 언어는 오직 저급 언어 뿐
    • 고급 언어로 작성된 소스 코드가 실행되려면 반드시 저급 언어(명령어)로 변환 되어야 함
  • 저급 언어의 종류

  • 기계어 : 0과 1의 명령어 비트로 이루어진 언어

  • 어셈블리어 : 기계어를 읽기 편한 형태로 번역한 언어

    • 개발자들에게 어셈블리어는 '관찰의 대상'이기도 함
    • 어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지, 프로그램이 어떤 절차로 작동하는지 가장 근본적인 단계부터 추적하고 관찰할 수 있기 때문

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

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

  • 컴파일 방식
  • 인터프리터 방식

2) 각 언어

  • 컴파일 언어 : 컴파일 방식으로 작동하는 프로그래밍 언어
    • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어(대표적으로 C)
    • 컴파일 : 컴파일 언어로 작성된 소스 코드의 코드 전체가 저급 언어로 변환되는 과정
    • 컴파일러 : 컴파일을 수행하는 도구
    • 목적 코드 : 컴파일러를 통해 저급 언어로 변환된 코드
      /
  • 인터프리터 언어 : 인터프리트 방식으로 작동하는 프로그래밍 언어
    • 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어(python)
    • 인터프리터 : 소스 코드를 한 줄씩 저급 언어로 변환하여 실행하는 도구. 변환하는 시간을 기다릴 필요 없음

3. 목적 파일 vs 실행 파일

  • 목적 파일
    • 목적 코드로 이루어진 파일
    • 목적 코드가 실행 파일이 되기 위해서 링킹 작업 거쳐야 함
      • 링킹 : 파일 간의 연결 작업
  • 실행 파일
    • 실행 코드로 이루어진 파일(.exe 확장자를 가진 파일)

/

3-2. 명령어의 구조

1. 연산 코드와 오퍼랜드

  • 명령어 : 연산 코드 + 오퍼랜드 구성
  • 연산 코드(operation code) : 명령어가 수행할 연산
  • 오퍼랜드(operand) : 연산에 사용할 데이터, 연산에 사용할 데이터가 저장된 위치
    • 연산 코드 = 연산자, 오퍼랜드 = 피연산자
  • 연산 코드가 담기는 영역은 연산 코드 필드, 오퍼랜드가 담기는 영역은 오퍼랜드 필드라고 함
    /
  • 오퍼랜드
    • 오퍼랜드 필드에는 데이터, 메모리, 레지스터 주소가 올 수 있음
    • 주소 필드라고도 함
    • 오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 여러 개가 있을 수도 있음. (하나도 없는 명령어 : 0-주소 명령어, 하나인 명령어 : 1-주소 명령어 등)
      /
  • 연산 코드
    • 유형 4가지
      • 데이터 전송
      • 산술/논리 연산
      • 제어 흐름 변경
      • 입출력 제어

2. 주소 지정 방식

  • 오퍼랜드 필드에 메모리나 레지스터 주소를 담는 이유 : 명령어 길이 때문

만약 오퍼랜드 필드 안에 메모리 주소가 담긴다면 표현할 수 있는 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는 공간만큼 커짐

  • 유효 주소 : 연산 코드에 사용할 데이터가 저장된 위치, 연산의 대상이 되는 데이터가 저장된 위치

  • 주소 지정 방식 : 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방식. 유효 주소를 찾는 방식

    • 즉시 주소 지정 방식 : 오퍼랜드 필드에 직접 명시

    • 직접 주소 지정 방식 : 오퍼랜드 필드에 유효 주소를 직접적으로 명시

    • 간접 주소 지정 방식 : 유효 주소의 주소를 오퍼랜드 필드에 명시

    • 레지스터 주소 지정 방식 : 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시

    • 레지스터 간접 주소 지정 방식 : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시

[정리]

  • 주소 지정 방식 : 연산에 사용할 데이터를 찾는 방법

  • 유효 주소 : 연산에 사용할 데이터가 저장된 위치

  • 즉시 주소 지정 방식 : 연산에 사용할 데이터

  • 직접 주소 지정 방식 : 유효 주소(메모리 주소)

  • 간접 주소 지정 방식 : 유효 주소의 주소

  • 레지스터 주소 지정 방식 : 유효 주소(레지스터 이름)

  • 레지스터 간접 주소 지정 방식 : 유효 주소를 저장한 레지스터

[추가 숙제] 스택과 큐 정리하기
1. 스택(stack)

  • 나중에 저장한 데이터를 가장 먼저 빼냄(후입선출, LIFO)
  • push : 새로운 데이터 저장하는 명령어
  • pop : 저장된 데이터 꺼내는 명령어
  1. 큐(queue)
  • 가장 먼저 저장된 데이터부터 빼냄(선입선출, FIFO)
profile
소프트웨어학부 2학년

0개의 댓글