CS

명령어(Instruction)에 대해 알아보자

minkg3532 2026. 6. 1. 22:11

1. 명령어(Instruction)란 무엇인가?

1.1 명령어의 정의

명령어(Instruction)는 프로그래머가 작성한 소프트웨어의 특정 동작이나 작업들을 CPU(중앙처리장치)가 직접 이해하고 실행할 수 있도록 지시하기 위해 약속된 기계어 또는 프로그래밍언어를 뜻한다.

 

기계적으로 명령어는 오직 0과 1로만 이루어진 이진 코드(기계어, Machine Code)의 비트 패킷 형태를 띠며, 인간이 식별하기 위해 ADD, SUB, JMP 같은 어셈블리어 기호(Mnemonic)로 일대일 매핑하여 표현한다.

 

1.2 명령어의 구조

명령어는 CPU에게 "어떤 행동을 하라"고 내리는 한 줄의 비트 패킷이다. 이 패킷은 논리적으로 크게 두 가지 구역으로 쪼개질 수 있다.

 

옵코드 (Opcode - Operation Code)

  • 뜻: "무엇을 할 것인가?"를 결정하는 연산 코드이다.
  • 역할: CPU 내부의 디코더(Decoder) 전선 회로로 바로 인입되어, ALU를 켤지, 메모리 문을 열지, 데이터를 복사할지 등의 물리적 제어 신호를 만들어낸다.
  • 예시: ADD(덧셈), AND(논리곱), LDW(메모리 읽기), BR(분기/점프) 등.

② 오퍼랜드 (Operand - 피연산자)

  • 뜻: "무엇을 대상으로 연산할 것인가?"를 지정하는 연산 대상(데이터 또는 주소)이다.
  • 종류
    • 레지스터 번호: 데이터를 꺼내오거나 저장할 CPU 내부의 물리 주소 (예: $R1$, $R2$).
    • 메모리 주소: 메인 메모리(RAM)의 특정 주소(예: x3000, xFE00).
    • 즉시값(Immediate): 명령어 패킷에 직접 박혀있는 상수 숫자 (예: $imm5$, $10$).

 

2. 명령어의 핵심 역할

2.1. 하드웨어와 소프트웨어의 통역 및 매개 역할

작성한 소스 코드(a = b + 10)는 물리적인 하드웨어 장치 입장에서는 실체가 없는 것과 같다. 명령어는 이 논리적 설계를 트랜지스터 스위치를 열고 닫는 전기적 전압(High/Low) 신호로 일대일 번역해 주는 역할을 한다.

  • 명령어 덕분에 개발자는 CPU의 내부 회로 배치도를 몰라도 코딩을 할 수 있고, 하드웨어 엔지니어는 소프트웨어 코드의 맥락을 몰라도 연산을 정확하게 수행하는 칩을 설계할 수 있다.

2.2. 데이터의 이동 및 산술/논리 연산 기능

컴퓨터의 데이터 처리를 지칭/유도하는 그 자체이다. 

  • 메모리에 존재하고 있는 데이터를 CPU 작업대(레지스터)로 끌어오고(LDW), 산술 논리 장치(ALU)를 활성화하여 물리적으로 전자를 충돌시켜 계산을 유도하며, 계산 결과를 다시 메모리에 저장하는(STW) 데이터의 일련의 전송 과정을 통제한다.

2.3. 프로그램 실행 흐름의 동적 통제 (Control Flow)

명령어는 기본적으로 메모리 주소를 따라 위에서 아래로 순차 실행되지만, 조건에 따라 흐름을 바꾸는 핵심 역할을 수행한다.

  • 조건 분기 명령어(BR)를 통해 특정 조건이 맞을 때 프로그램 코드의 다른 주소로 점프하여 조건문(if-else)과 반복문(loop)을 구성한다.
  • 함수 호출 명령어(JSR/JSRR)를 통해 특정 코드로 진입했다가 되돌아오는 구조를 지원한다.

2.4. 시스템 상태 보호 및 특권 권한 관리

현대 컴퓨터는 여러 개의 앱이 동시에 돌아가며, 신뢰할 수 없는 앱이 중요한 시스템 자원(하드디스크, 모니터 화면, 키보드 장치 등)을 무단으로 건드리지 못하게 해야 한다.

  • 명령어는 CPU 내부의 프로세서 상태 레지스터($PSR$) 값을 변경하거나 확인하여, 현재 실행 권한이 일반 사용자 모드인지 운영체제(OS) 관리자 모드인지를 구별하고 차단한다.
  • 유저 프로그램이 하드웨어를 직접 제어하고 싶을 때 시스템 콜(TRAP) 역할을 제공하여 운영체제가 하드웨어를 관리할 수 있도록 돕는다.

 

3. 명령어와 메모리(Memory)의 관계

메모리(RAM)는 명령어와 데이터가 함께 거주하는 거대한 공유 공간이다. 이 패러다임을 폰 노이만 구조(von Neumann Architecture)라고 부른다. 물리적 반도체 소자(트랜지스터와 커패시터) 입장에서는 내부에 갇힌 전하가 게임 캐릭터의 HP(데이터)인지, ADD 연산(명령어)을 나타내는지 구별할 수 없으며, 두 존재 모두 똑같은 '0과 1의 전기적 상태'로 이 공간을 공유한다.

  • 저장 공간으로서의 메모리: 프로그램이 실행되면, 영구 보존용 보조기억장치(SSD/HDD)에 존재해 있던 기계어 파일(.exe) 속 명령어 비트 패킷들이 메인 메모리(RAM)의 특정 구역(코드 세그먼트 영역)에 순서대로 복사되어 로드된다. CPU는 1초에 수십억 번(GHz) 움직일 정도로 상상을 초과하게 빠르기 때문에, 상대적으로 속도가 느린 SSD에서 명령어를 직접 읽지 않고, 이 적재(Load) 과정을 거쳐 전기적 반응 속도가 극도로 빠른 반도체 RAM 칩 위에 명령어들을 미리 펼쳐두고 실행한다.
  • 주소 지정과 정렬: 명령어들은 메모리 단위 공간마다 부여된 메모리 주소(Address)라는 고유 번호판을 달고 있다. 현대 컴퓨터는 하나의 메모리 주소당 정확히 1바이트($8$비트)의 데이터만 매핑되도록 설계(Byte-addressable)되어 있다. LC-3b와 같은 $16$비트 컴퓨터라면 명령어 하나가 총 $16$비트, 즉 $2$바이트를 차지하므로 명령어 한 줄을 저장하는 데 연속된 2개의 메모리 주소(2바이트 분량의 메모리 주소 공간) 할당이 필수적이다. 이에 따라 첫 번째 명령어가 상하위 8비트씩 쪼개져 x3000~x3001 주소 영역을 차지하면, 두 번째 명령어는 x3002~x3003 주소 영역을 차지하게 된다. 그러므로 모든 명령어의 시작 주소(대표 주소)는 메모리 주소 짝수 번지($x3000$, $x3002$, $x3004$...)마다 나란히 저장(Word Alignment)된다. 하드웨어 전선이 짝수 단위로 정렬되어 있기 때문에, 만약 명령어가 홀수 번지에 걸쳐 저장되면 CPU가 명령어를 한 줄 읽을 때 전기를 2배로 쓰고 메모리에 2번 접근해야 하는 심각한 병목(Alignment Exception)이 발생하므로 이 짝수 배치를 법처럼 강제한다.
  • 통신 채널(버스): CPU와 메모리는 독립된 반도체 칩이므로, 둘 사이를 연결하는 수많은 미세 구리 전선 가닥들의 묶음인 '버스(Bus)'를 통해 소통한다. CPU가 명령어를 가져오는 인출(Fetch) 단계가 시작되면, CPU는 내부의 프로그램 카운터(PC)가 가리키는 이진수 주소 모양 그대로 주소 버스(Address Bus) 전선들에 전압(High/Low)을 줘서 메모리로 보낸다. 동시에 제어 버스(Control Bus)의 '읽기 신호선' 전압을 높여 메모리를 활성화하면, 메모리 칩 내부에서 해당 짝수 번지 주소 영역의 트랜지스터 회로가 열리며 갇혀 있던 명령어 비트들이 쏟아져 나온다. 이 전기 신호들이 오직 데이터만 나르는 고속도로인 데이터 버스(Data Bus) 전선들을 타고 역으로 CPU 내부로 질주하여, 지금 실행할 명령어를 대기시키는 방인 명령어 레지스터($IR$, Instruction Register) 회로에 안착하는 물리적 이동을 완수한다.

 

4. 명령어와 CPU의 관계

CPU는 명령어를 받아들이고, 해독하고, 트랜지스터를 움직여 실행하는 역할을 한다. CPU 내부의 주요 부품들은 명령어를 처리하기 위해 긴밀하게 움직인다.

  • PC (Program Counter - 프로그램 카운터): "다음에 실행할 명령어의 메모리 주소"를 기억하는 특수 레지스터.
    CPU가 명령어를 하나 읽어올 때마다 $PC$ 값은 자동으로 다음 명령어의 주소($PC + 2$)로 증가함.
  • IR (Instruction Register - 명령어 레지스터): 메모리에서 갓 복사해 온 "지금 실행 중인 명령어 패킷"을 임시로 붙잡아두는 대기실이다.
  • 제어 장치 (Control Unit / Decoder): $IR$에 들어온 명령어의 앞머리인 Opcode 비트를 읽고, 수천 갈래의 CPU 내부 전선 중 어느 전선에 전기를 흘려보낼지(1), 차단할지(0) 결정하는 장치.
  • ALU (Arithmetic Logic Unit - 산술논리연산장치): 제어 장치가 보낸 전기 신호에 따라, 실제로 전자를 굴려 덧셈, 뺄셈, AND, OR 등의 물리적 연산을 수행함.
  • 레지스터 파일 (Register File): 계산에 즉시 필요한 데이터 재료($SR$)와 계산이 완료된 결과값($DR$)을 보관하는 초고속 물리 저장소이다.