[컴퓨터 공학] 기계어

오늘내일·2023년 9월 23일
0

기계어

CPU가 인식해서 기능을 이해하고 실행할 수 있는 명령어를 말한다. 조금 더 설명하자면 CPU가 직접 해독하고 실행할 수 있는 비트 단위로, 즉 0과 1로 쓰인 컴퓨터 언어이다.

따라서 CPU마다 기계어 코드의 길이와 숫자 코드가 다르다. 보통 Operation code(OPcode)와 Operand(피연산자)로 구성되어져 있다.

Operation code는 CPU가 수행할 연산을 의미한다. 보통 회로가 처리할 수 있는 아래와 같이 간단한 기능들이 있다.

  • 데이터 전송 관련 : load, store 등
  • 연산 :
    - 논리연산 : and, or, not, xor
    • 산술연산 : add
    • 회전, 자리이동 연산 : shift, rotate
  • 제어 : branch, jump, call 등

참고로 기계어는 비트(0과 1)로 구성되어져 있는데 프로그램 개발자가 숫자로 프로그램하기가 불편하므로 기계어와 가령 위의 정리처럼 일대일로 문자화한 것이 어셈블리언어이다.

Operand(피연산자)는 연산이 수행될 데이터 또는 데이터 위치(메모리 내 주소, 어떤 레지스터를 사용할 것인지 등)를 나타낸다.

기계어 예시

위 그림은 기계어의 예시로 32bit의 MIPS CPU를 기준으로 세가지 포맷으로 구성된 명령어이다. 하나씩 예를 들어 살펴보자.

1.R format

위 그림을 간단하게 살펴보자.

  • op : operation code를 뜻한다.
  • rs : 첫 번째 source operand의 레지스터 넘버이다.
  • rt : 두 번째 source operand의 레지스터 넘버이다.
  • rd : 결과가 저장될 목적지의 레지스터 넘버이다.
  • shamt : shift amount로 자리 이동의 양을 뜻한다.
  • funct : 연산자 코드에서 나타난 연산 종류 중 구체적으로 지정

위의 그림 기준으로 설명해보면 레지스터1과 2를 연산하여 레지스터6에 저장한다.

  1. I format
  • address/immediate : address는 메모리 주소, immediate는 일종의 상수같은 개념으로 , instruction(명령어) 내부에서 값과 직접 연산을 포함한다.
    특이한 점은 I format에서는 immediate가 operand(피연산자)가 되어 rt에 저장된다. 따라서, 위 그림에서는 레지스터3번 값과 메모리 셀 68에서 가져온 정보를 연산하여 레지스터 8에 저장한다.
  1. J format

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

profile
다시 시작합니다.

0개의 댓글