CPU가 인식해서 기능을 이해하고 실행할 수 있는 명령어를 말한다. 조금 더 설명하자면 CPU가 직접 해독하고 실행할 수 있는 비트 단위로, 즉 0과 1로 쓰인 컴퓨터 언어이다.
따라서 CPU마다 기계어 코드의 길이와 숫자 코드가 다르다. 보통 Operation code(OPcode)와 Operand(피연산자)로 구성되어져 있다.
Operation code는 CPU가 수행할 연산을 의미한다. 보통 회로가 처리할 수 있는 아래와 같이 간단한 기능들이 있다.
참고로 기계어는 비트(0과 1)로 구성되어져 있는데 프로그램 개발자가 숫자로 프로그램하기가 불편하므로 기계어와 가령 위의 정리처럼 일대일로 문자화한 것이 어셈블리언어이다.
Operand(피연산자)는 연산이 수행될 데이터 또는 데이터 위치(메모리 내 주소, 어떤 레지스터를 사용할 것인지 등)를 나타낸다.
위 그림은 기계어의 예시로 32bit의 MIPS CPU를 기준으로 세가지 포맷으로 구성된 명령어이다. 하나씩 예를 들어 살펴보자.
1.R format
위 그림을 간단하게 살펴보자.
위의 그림 기준으로 설명해보면 레지스터1과 2를 연산하여 레지스터6에 저장한다.
J format은 op가 점프 관련 명령을 내릴 때 주로 사용하는데 그림을 보면 target address로 직접 점프한다는 뜻이다. 즉, address 1024로 점프한다는 뜻이다.
사람 말도 잘 못 알아듣겠는데 기계어까지 알아야 하나 싶기도 하다만...
암튼 기계어는 CPU마다 다르기 때문에 전문적으로 다루면 끝도 없을 듯하여(내가 더 깊게 파기 싫으므로), 기계어는 위와 같은 형식을 가지고 있다는 정도만 가볍게 감을 잡도록 해야겠다.
참고사이트 :
http://arkainoh.blogspot.com/2016/10/instruction.set.architecture.html
https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%EC%96%B4_%EC%A7%91%ED%95%A9
https://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B3%84%EC%96%B4