Post

2026-05-28 TIL (66일차)

2026-05-28 TIL (66일차)

[TIL] CS 지식: 컴퓨터가 이해하는 정보 - ‘명령어’ (Instruction)

1. 명령어의 구조

하나의 명령어는 ‘수행할 동작’‘수행할 대상’으로 구성됩니다.

  • 연산 코드 (Opcode / Operation Code): 수행할 동작을 나타냅니다.
  • 오퍼랜드 (Operand / 피연산자): 수행할 대상(데이터)을 나타냅니다.
    • 오퍼랜드 필드에는 연산에 사용될 ‘데이터 자체’가 들어갈 수도 있지만, 일반적으로는 데이터가 저장된 ‘위치(메모리 주소나 레지스터 이름)’가 명시되는 경우가 훨씬 많습니다.
    • 이런 특징 때문에 오퍼랜드 필드를 주소 필드(Address Field)라고 부르기도 합니다.
    • 하나의 명령어에 오퍼랜드는 없을 수도(0개), 1개일 수도, 2개 이상일 수도 있습니다.

주의할 점 (메모리 접근): 오퍼랜드에 ‘메모리 주소’가 명시되어 있을 경우, CPU가 명령어를 메모리에서 인출(가져옴)했다고 해서 바로 실행할 수 없습니다. 명시된 주소에 어떤 데이터가 있는지 확인하기 위해 추가적인 메모리 접근이 요구될 수 있습니다.


2. 대표적인 연산 코드의 종류

CPU의 종류나 모델에 따라 지원하는 연산 코드에 차이가 있지만, 대부분 공통적으로 지원하는 대표적인 연산 코드 유형은 다음과 같습니다.

  1. 데이터 전송 (Data Transfer)
  2. 산술/논리 연산 (Arithmetic / Logic Operation)
  3. 제어 흐름 변경 (Control Flow)
  4. 입출력 제어 (I/O Control)

스택(Stack) 관련 연산 코드

  • PUSH: 스택에 데이터를 저장해라.
  • POP: 스택에서 데이터를 빼내 와라.
  • 스택(Stack)이란? 한쪽 끝이 막혀 있는 통과 같은 자료구조로, 나중에 들어간 데이터가 먼저 나오는 LIFO (Last In First Out) 구조입니다. (메모리 안에는 이러한 스택 형태로 사용할 수 있는 ‘스택 영역’이 존재합니다.)

3. 기계어와 어셈블리어

CPU는 0과 1만을 이해합니다. 명령어도 0과 1로 표현되는데, 이를 표현하는 방식에 따라 언어가 나뉩니다.

  • 기계어 (Machine Language):
    • CPU가 직접적으로 이해할 수 있도록 0과 1로 표현된 명령어의 모음입니다.
    • 윈도우의 .exe (실행 파일)가 대표적인 기계어로 이루어진 파일입니다.
  • 어셈블리어 (Assembly Language):
    • 0과 1로 이루어진 기계어는 사람이 읽고 해석하기 너무 어렵기 때문에, 이를 사람이 읽기 편한 문자 형태로 단순 번역한 저수준 언어입니다.
  • CPU 의존성:
    • CPU 아키텍처마다 이해할 수 있는 연산 코드와 명령어 종류가 다르기 때문에, CPU가 달라지면 기계어도 다르고 어셈블리어의 형태도 달라집니다.

4. 명령어 사이클 (Instruction Cycle)

CPU가 명령어를 처리할 때는 일정한 흐름과 규칙성에 따라 주기적으로 동작하는데, 이 정형화된 흐름을 명령어 사이클이라고 부릅니다.

  1. 인출 사이클 (Fetch Cycle): * 메모리에 적재된 실행하고자 하는 명령어를 CPU로 가지고 오는(가져오는) 단계입니다.
  2. 실행 사이클 (Execution Cycle): * 인출한 명령어를 실제로 실행하는 단계입니다. (기본적인 명령어는 인출 ➡️ 실행을 반복합니다.)
  3. 간접 사이클 (Indirect Cycle): * 명령어를 인출했음에도 오퍼랜드가 메모리 주소로 되어 있어, 실행을 위해 추가적인 메모리 접근이 요구되는 단계입니다. (인출 ➡️ 간접 ➡️ 실행)
  4. 인터럽트 사이클 (Interrupt Cycle): * 정상적인 사이클 도중 발생한 인터럽트(예외 상황 등)를 처리하는 단계입니다. (운영체제 및 인터럽트 파트에서 상세히 다룸)
This post is licensed under CC BY 4.0 by the author.