기계어(機械語, machine language, machine code)는 컴퓨터의 중앙 처리 장치(CPU)가 별도의 해석 과정 없이 직접 읽고 실행할 수 있는 가장 낮은 수준의 프로그래밍 언어를 가리킨다. 이진 컴퓨터의 경우 기계어는 0과 1의 이진수(binary)로 구성된 명령어 집합으로 표현되며, 이는 컴퓨터 프로그램이 실제로 하드웨어 수준에서 실행되는 형태이다.
기계어는 CPU가 물리적으로 인식하는 전기 신호의 ON(1)과 OFF(0) 상태에 대응하므로, 특정 CPU 아키텍처에 종속적이다. 즉, 같은 프로그램이라도 CPU의 명령어 집합 구조(instruction set architecture)에 따라 기계어 코드가 달라질 수 있다. 이러한 특성 때문에 기계어는 하드웨어와 직접 상호 작용하며, 특정 컴퓨터 아키텍처에 맞추어 작성된다.
기계어 명령어는 일반적으로 연산 코드(operation code, opcode)와 피연산자(operand) 두 부분으로 구성된다. 연산 코드는 CPU가 수행할 동작(예: 덧셈, 이동, 비교 등)을 지정하고, 피연산자는 그 동작이 적용될 데이터나 주소를 지정한다.
기계어는 어셈블리어(assembly language)와 밀접한 관계가 있다. 어셈블리어는 기계어를 사람이 읽기 쉬운 기호(mnemonic)로 표현한 저수준 언어로, 어셈블러(assembler)라는 프로그램이 이를 기계어로 변환한다. 한편 C, Java, Python 등 고급 프로그래밍 언어로 작성된 소스 코드는 컴파일러(compiler)나 인터프리터(interpreter)를 거쳐 최종적으로 기계어(또는 그에 준하는 중간 코드)로 변환되어 CPU에서 실행된다.
기계어는 1940년대 초기 컴퓨터 시대부터 사용된 가장 오래된 프로그래밍 언어 형태 중 하나로, 컴퓨터 과학과 소프트웨어 개발의 기초 개념으로 자리 잡고 있다. 기계어는 사람이 직접 읽고 이해하기 어렵다는 단점이 있으나, 하드웨어를 가장 직접적으로 제어할 수 있다는 점에서 컴퓨터 구조와 시스템 소프트웨어를 이해하는 데 핵심적인 개념이다.