본문 바로가기
컴퓨터구조

[컴퓨터구조][기초] 명령어의 구조 - 연산 코드

by codingbird1234 2025. 3. 11.

*해당 글은 '혼자 공부하는 컴퓨터구조 + 운영체제(강민철 지음)'을 참고하여 작성되었습니다.

*구체적인 예시와 함께 더 자세히 공부하고 싶으신 분들은 해당 책을 읽어보시기를 추천드립니다.

 

 

 

지난 시간에는 소스 코드가 명령어로 바뀌는 과정에 대해 배웠습니다.

이번 시간에는 이 명령어가 어떻게 이루어져 있는지, 그 구조에 대해 배워보겠습니다.

 

연산 코드와 오퍼랜드

명령어는 연산 코드(Operation Code)오퍼랜드(Opearand)로 이루어져 있습니다.

연산 코드명령어가 수행할 연산을 말하고,

오퍼랜드연산에 사용할 데이터 혹은 연산에 사용할 데이터가 저장된 위치를 말합니다.

연산 코드가 담기는 영역을 연산 코드 필드, 오퍼랜드가 담기는 영역은 오퍼랜드 필드라고 합니다.

 

 

오퍼랜드

오퍼랜드는 연산에 사용할 데이터 혹은 데이터가 저장된 위치를 말한다고 했었죠?

때문에 오퍼랜드 필드에는 데이터 그 자체가 올 수도 있지만, 많은 경우에 메모리나 레지스터 주소가 옵니다.

그래서 오퍼랜드 필드를 주소 필드라고 부르기도 합니다.

 

오퍼랜드는 명령어 안에 1개 있을 수도 있고, 2개 이상 있을 수도 있고, 아예 없을 수도 있습니다.

명령어 안에 있는 오퍼랜드의 개수에 따라 0-주소 명령어, 1-주소 명령어, 2-주소 명령어, 3-주소 명령어가 있습니다.

 

 

연산 코드

연산 코드는 명령어가 수행할 연산을 의미한다고 했었습니다.

예를 들면, 더해라, 빼라, 곱해라, 나눠라, ... 이런 것들이 있겠죠?

이와 같이, 연산 코드에는 여러 가지 종류가 있습니다.

하지만 연산 코드의 유형은 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어, 이렇게 4가지로 나눌 수 있습니다.

 

명령어의 종류, 그리고 생김새는 CPU마다 다릅니다. 따라서 연산 코드의 종류와 생김새도 CPU마다 다릅니다.

그래도, 위 4가지 유형에 따라 대표적인 연산 코드 몇 개만 알아보도록 하겠습니다.

 

데이터 전송

  • MOVE : 데이터를 옮겨라
  • STORE : 메모리에 저장하라
  • LOAD : 메모리에서 CPU로 데이터를 가져와라
  • PUSH : 스택에 데이터를 저장하라
  • POP : 스택의 최상단 데이터를 가져와라

산술/논리 연산

  • ADD / SUBTRACT / MULTIPLY / DIVIDE : 덧셈 / 뺄셈 / 곱셈 / 나눗셈
  • INCREMENT / DECREMENT : 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
  • AND / OR / NOT : 각 연산(AND, OR, NOT)을 수행하라
  • COMPARE : 두 개의 숫자 또는 TRUE / FALSE 값을 비교하라

제어 흐름 변경

  • JUMP : 특정 주소로 실행 순서를 이동하라
  • CONDITIONAL JUMP : 조건에 부합하면 특정 주소로 실행 순서를 이동하라
  • HALT : 프로그램 실행을 멈춰라
  • CALL : 되돌아올 주소를 저장하고, 특정 주소로 실행 순서를 이동하라
  • RETURN : CALL에서 저장했던 주소로 실행 순서를 이동하라

입출력 제어

  • READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
  • WRITE(OUTPUT) : 특정 입출력 장치로 데이터를 써라
  • START IO : 입출력 장치를 시작하라
  • TEST IO : 입출력 장치의 상태를 확인하라

 

이번 시간에는 명령어의 구조에 대해 간단히 알아보았습니다!

명령어는 연산 코드오퍼랜드로 이루어져 있다고 했었죠?

그리고 연산 코드의 유형각 유형의 대표적인 연산 코드를 간단히 알아보았습니다.

 

다음 시간에는 오퍼랜드에 대해 좀 더 자세히 알아보도록 하겠습니다!