# 기계어 (Machine Language)

기계어(machine language, machine code)는 CPU가 별도의 번역 없이 직접 해석하고 실행하는 이진 명령어와 데이터의 체계입니다. 어떤 비트 열이 어떤 명령이 되는지는 그 프로세서의 명령어 집합 구조(ISA)가 정합니다.

## 자세히 알아보기

명령어 집합 구조는 CPU가 받아들이는 명령의 종류, 비트 배치, 레지스터 같은 프로그래밍 인터페이스를 정의합니다. x86-64, ARM(AArch64), RISC-V처럼 계열마다 ISA가 다르므로 한 계열용 기계어는 일반적으로 다른 계열에서 그대로 실행되지 않습니다. 반대로 같은 ISA라면 운영 체제가 달라도 덧셈이나 분기 같은 명령어 자체는 같습니다.

운영 체제가 정하는 것은 기계어 자체가 아니라 그것을 담고 실행하는 방식입니다. 실행 파일 형식(Windows의 PE, Linux의 ELF, macOS의 Mach-O), 함수 호출과 시스템 호출 규약(ABI)이 운영 체제마다 다르기 때문에, 같은 CPU에서도 다른 운영 체제용 실행 파일은 보통 그대로 돌아가지 않습니다.

어셈블리어는 기계어 명령을 사람이 읽을 수 있는 기호(니모닉)로 거의 일대일로 옮긴 것이고, 어셈블러가 이를 기계어로 바꿉니다. C, C++, Rust 같은 언어는 컴파일러가 대상 ISA의 기계어로 번역합니다. Java나 Python(표준 구현 CPython)은 보통 먼저 가상 머신용 바이트코드로 바뀌며, 바이트코드는 CPU가 직접 실행하지 않습니다. 가상 머신이 이를 해석하거나 실행 중에 기계어로 번역합니다. 기계어로 직접 프로그램을 쓰는 일은 가능하지만 번거롭고 오류가 나기 쉬워, 오늘날에는 대부분 고급 언어나 어셈블리어를 거칩니다.

## 블록체인·암호화폐에서는

이더리움 스마트 컨트랙트는 Solidity 같은 언어로 작성한 뒤 CPU의 기계어가 아니라 EVM(이더리움 가상 머신) 바이트코드로 컴파일됩니다. 계정이 컨트랙트를 호출하면 각 노드의 EVM이 이 바이트코드를 연산 코드(opcode) 단위로 실행합니다. 이때 EVM 바이트코드는 가상 머신의 "기계어" 역할을 하고, EVM을 구현한 노드 소프트웨어 자체는 노드가 돌아가는 컴퓨터의 ISA에 맞춘 기계어로 실행됩니다. 덕분에 서로 다른 하드웨어의 노드가 같은 바이트코드를 실행해 같은 결과를 얻을 수 있습니다.

## 쉽게 말하면

기계어는 특정 기종의 기계만 읽을 수 있는 작업 지시 카드와 비슷합니다. 사람은 문장으로 지시서를 쓰고, 번역 담당(컴파일러)이 이를 그 기종의 카드 형식으로 옮깁니다. 기종(ISA)이 다르면 카드 형식도 다르고, 건물 관리 규칙(운영 체제)은 카드를 어떤 봉투(실행 파일 형식)에 넣어 전달할지를 정합니다.

## 예시

x86에서 아무 일도 하지 않는 명령 NOP는 기계어로 0x90 한 바이트입니다. EVM에서는 스택의 두 값을 더하는 ADD가 0x01로 표현됩니다. 두 값은 각자 다른 "기계"(x86 CPU와 EVM)의 명령 체계에 속합니다.

---
출처: https://achivx.kr/glossary/machine-language-%EA%B8%B0%EA%B3%84%EC%96%B4/ · ACHIVX 용어 사전 · 수정일 2026-10-20
