컴퓨터 과학

[컴퓨터 구조] 컴퓨터가 이해하는 정보 -명령어

Data Jun 2025. 11. 23. 10:17

CPU가 프로그램을 실행하기 위해 반드시 이해해야 하는 것이 바로 **명령어(Instruction)**이다.
명령어는 단순한 “지시” 이상의 의미를 가지고 있으며, 내부적으로는 여러 요소로 구성된 정교한 구조를 갖는다.
이번 글에서는 명령어의 개념부터 명령어 사이클까지 한 번에 정리해본다.

 

1. 명령어란 무엇인가?

명령어는 CPU가 수행할 동작(operation)과 그 동작에 사용될 대상(operand) 으로 이루어진 하나의 작업 단위이다.

즉,

  • CPU가 무엇을 할지(더해라, 빼라, 저장해라 등)
  • 어떤 데이터로 할지 또는 그 데이터가 어디에 있는지

이 두 가지 정보를 담고 있는 것이 바로 명령어다.

 

1️⃣ 수행할 동작(Operation)

예를 들어,

  • 더해라
  • 빼라
  • 저장해라

와 같은 연산 명령이 CPU에 전달된다.

 

2️⃣ 수행할 대상(Operand)

수행할 연산에 필요한 데이터 그 자체 또는 데이터가 저장된 메모리 주소를 의미한다.

 

오퍼랜드의 개수는 1개 이상일 수 있다.
많은 명령어는 보통 1~2개의 오퍼랜드를 가지고 있지만, CPU 설계에 따라 더 많아질 수도 있다.

 

2. 명령어의 구성: 연산 코드와 오퍼랜드

 ┌───────────────────── 명령어(Instruction) ────────────────────
 │                                                             │
 │   ┌────────────┐   ┌────────────────────────────────────┐   │
 │   │  연산 코드  │   │              오퍼랜드              │   │
 │   │  (Opcode)  │   │      Operand #1, Operand #2 ...    │   │
 │   └────────────┘   └────────────────────────────────────┘   │
 │                                                             │
 └─────────────────────────────────────────────────────────────┘

 

하나의 명령어는 크게 두 부분으로 나뉜다.

  • 연산 코드(opcode)
    CPU가 수행해야 할 동작을 의미한다.
  • 오퍼랜드(operand)
    연산에 필요한 데이터 또는 데이터가 저장된 위치
    (피연산자라고도 부른다)

예시로 보면 다음과 같다:

연산 코드 오퍼랜드
더해라 100과 120
빼라 메모리 32번지의 값, 메모리 33번지의 값
저장해라 10을, 메모리 128번지에

 

3. 오퍼랜드가 메모리 주소를 포함할 때

명령어의 오퍼랜드가 메모리 주소일 경우, CPU는 해당 명령어를 실행하기 위해 추가적인 메모리 접근을 수행해야 한다.

예) 더해라, 100번지 값에, 10을

이 명령은 다음 단계를 거친다.

  1. CPU가 메모리에서 명령어 자체를 먼저 가져온다. (인출 사이클)
  2. 명령어를 해석해 보니 “100번지의 값”이 필요하다.
  3. 따라서 CPU는 다시 한 번 메모리에 접근해 100번지에 저장된 실제 데이터를 읽어온다.
  4. 읽어온 값과 10을 더하는 연산을 수행한다.

✔ 즉,
명령어 안에 메모리 주소가 포함되면, CPU는 연산 전에 반드시 메모리를 추가로 읽어야 한다.

 

4. 기계어와 어셈블리어

 

CPU는 결국 **0과 1로 구성된 기계어(machine code)**만 이해할 수 있다.
하지만 사람이 기계어를 직접 읽고 쓰기는 매우 어렵기 때문에, 이를 사람이 읽기 쉬운 형태로 바꾼 언어가 **어셈블리어(assembly language)**이다.

 

가계어(0/1코드) 어셈블리어
0101 0101 push rdp
0101 1101 pop rbp
1100 0011 ret

 

CPU에 따라 어셈블리어도 달라진다

 

같은 기능을 하는 C 코드라도 CPU 구조가 다르면 기계어와 어셈블리어가 완전히 달라진다.

예시: int square(int num) { return num * num; }

  • CISC 기반 CPU 어셈블리어 (x86 계열)
    명령어가 다소 복잡하고 다양한 기능 포함
  • RISC 기반 CPU 어셈블리어 (ARM 계열)
    단순한 명령을 여러 개 조합하여 수행

즉,
CPU 아키텍처에 따라 명령어 세트가 다르기 때문에 어셈블리어나 기계어도 달라진다.

 

5. 간접 사이클 & 인터럽트 사이클

✔ 간접 사이클 (Indirect Cycle)

 

연산을 수행하기 위해 한 번 더 메모리 접근이 필요한 경우 발생한다.

예를 들어,
명령어 안에 “메모리 100번지의 값”이 포함되어 있다면

  • 먼저 명령어를 메모리에서 가져오고
  • 명령어 해석 후
  • 100번지에 다시 접근해 실제 데이터를 읽어와야 한다

이 상황이 바로 간접 사이클이다.

 

 

정리하면

 

명령어는 CPU가 어떤 작업을 어떻게 수행할지 결정하는 핵심 요소다.
명령어 구조, 어셈블리어, 명령어 사이클을 이해하면 CPU 내부 동작을 훨씬 명확하게 파악할 수 있다.