맨위로가기

명령 코드

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

명령 코드(Operation Code)는 CPU의 기계어 명령어에서 연산을 식별하는 부분으로, CPU, 추상 컴퓨팅 머신, 어셈블리 언어, 가상 머신 등 다양한 환경에서 사용된다. CPU에서는 '명령어 기계 코드', '명령어 코드' 등 다양한 용어로 불리며, 명령어 집합 아키텍처(ISA)에 의해 정의된다. 어셈블리 언어에서는 니모닉으로 표현되며, 연산의 종류를 나타낸다. 가상 머신에서는 바이트 코드 형태로 존재하며, 소프트웨어 인터프리터에 의해 사용된다.

더 읽어볼만한 페이지

  • 기계어 - 브랜치 (컴퓨터 과학)
    프로그램 실행 흐름을 제어하는 명령어인 브랜치는 점프, 호출, 반환 명령어로 나뉘며, CPU 플래그 레지스터와 주소 지정 방식을 활용하여 코드 분기 및 서브루틴 호출/반환을 수행하지만, 파이프라인 CPU에서 성능 저하를 유발하여 분기 예측 등의 기술로 해결합니다.
  • 기계어 - 주소 지정 방식
명령 코드
명령어 코드
정의컴퓨터의 명령어 집합에서 특정 동작을 지정하는 명령어의 일부
구성 요소명령어 코드 (opcode) 와 피연산자 (operand) 로 구성
역할컴퓨터 CPU에게 어떤 연산을 수행할지 알려주는 역할
다른 이름연산 코드 (operation code)
명령어 (instruction)
머신 코드 (machine code)
상세 정보
크기명령어 집합 아키텍처에 따라 다름 (4비트에서 수십 비트)
기능데이터 이동
산술 연산
논리 연산
제어 흐름 변경
예시00 (16진수): 덧셈
01 (16진수): 뺄셈
B0 (16진수): 레지스터에 즉각적인 값 로드
명령어 형식명령어 코드 (opcode) 만 포함
명령어 코드 (opcode) 와 피연산자 주소 포함
명령어 코드 (opcode) 와 피연산자 자체 포함
기타
어셈블리어 표현add, sub, mov 와 같은 니모닉으로 표현
복잡 명령어 집합 컴퓨터 (CISC)더 복잡하고 다양한 명령어 코드 사용
축소 명령어 집합 컴퓨터 (RISC)더 적고 간단한 명령어 코드 사용

2. 기계어의 연산 코드

CPU의 기계어 명령어에서 연산을 식별하는 부분을 연산 코드라고 한다. 연산 코드는 '명령어 기계 코드', '명령어 코드', '명령어 음절', '명령어 소포', '연산 문자열'이라고도 불린다. 추상 컴퓨팅 머신에서도 연산 코드를 찾아볼 수 있다.

일례로, 인텔 8086에서 "지정된 레지스터의 값을 지정된 메모리 번지에 기록하라"는 명령의 연산 코드는 이진 표기로 "10001000", 16진 표기로 "0x88", 10진 표기로 "136"이다.[1]

연산 코드는 수식에서의 연산자와 같고, 피연산자는 숫자와 같다고 비유할 수 있다. 연산자가 숫자와 함께 사용되듯이, 연산 코드는 기본적으로 피연산자와 함께 사용된다.

2. 1. 명령어 집합 아키텍처(ISA)와의 관계

특정 프로세서(CPU 또는 GPU 등)의 연산 코드는 해당 프로세서의 명령어 집합 아키텍처(ISA)에 의해 정의된다. 명령어 집합은 연산 코드와 피연산자 지정자에 대해 거의 균일한 필드를 가질 수도 있지만, x86 아키텍처와 같이 균일하지 않고 가변 길이 구조를 가질 수도 있다. RISC와 같이 고정된 구조에 소수의 변형만을 가진 명령어 집합도 있다.[2]

대부분의 명령어는 연산 코드가 나타내는 동작의 대상이 되는 데이터를 지정하는 피연산자(오퍼랜드)와 함께 사용된다.[1] 하지만, 일부 명령어는 암시적 피연산자를 가지거나 피연산자가 전혀 없을 수도 있다.

2. 2. 연산 코드의 종류

연산 코드의 종류에는 산술 연산, 데이터 복사, 논리 연산, 프로그램 제어뿐만 아니라 CPUID와 같은 특수 명령어가 있다.

많은 명령어는 연산을 수행할 피연산자 데이터를 지정하지만, 일부 명령어는 암시적 피연산자를 가지거나 피연산자가 전혀 없을 수도 있다. 연산 코드의 대부분은 조작 대상 데이터를 나타내는 피연산자와 조합하여 사용하지만, '암묵적' 피연산자를 가진 연산 코드도 있다.

연산 코드가 나타내는 조작 명령은 주로 레지스터, 콜 스택, 다른 메모리 등에 데이터를 기록하는 것이다. I/O 포트에 관한 명령도 있으며, 어드레싱 모드를 이용하여 지정되고 접근된다.

3. 어셈블리 언어의 연산 코드

어셈블리 언어는 니모닉으로 기술되지만, 니모닉 중 조작에 관한 명령을 나타내는 것은 연산 코드(opcode)라고 불린다.[3][4][5] 연산 코드는 피연산자(조작 대상을 나타내는 코드)와 대비된다.

4. 가상 머신의 연산 코드

가상 머신이나 추상 머신에도 오퍼레이션 코드가 존재한다.[6] 주로 바이트 코드나 그 외의 중간 표현 안에 있다. 이러한 코드는 종종 그에 상응하는 하드웨어보다 높은 수준의 데이터 형식과 조작을 수행하는 명령어 집합을 기반으로 하지만, 비슷한 방식으로 구성된다. 예를 들어 자바 가상 머신(JVM)에 의해 해석되는 자바 클래스 파일의 바이트 코드, Emacs의 컴파일된 Emacs Lisp 바이트 코드, .NET 공통 중간 언어(CIL) 등이 있다.[6]

4. 1. 가상 머신 연산 코드의 특징

가상 머신 연산 코드는 바이트 코드 형태로 존재하며, 소프트웨어 인터프리터를 위한 표현에서 찾을 수 있다. 이러한 소프트웨어 기반 명령 집합은 하드웨어 연산 코드보다 더 높은 수준의 데이터 형식과 연산을 지원하는 경우가 많지만, 유사한 방식으로 구성된다.[6] 자바 클래스 파일에서 발견되는 바이트 코드는 자바 가상 머신(JVM)에 의해 해석된다.[6] GNU Emacs에서 컴파일된 Lisp 코드, .NET 공통 중간 언어(CIL) 등에도 바이트 코드가 사용된다.[6]

이러한 가상 머신 연산 코드는 중간 표현 안에 존재하며, 자바 가상 머신(JVM)에 의해 해석되는 자바 클래스 파일의 바이트 코드, Emacs의 컴파일된 Emacs Lisp 바이트 코드, .NET 공통 중간 언어(CIL) 등이 대표적인 예시이다.[6]

참조

[1] 문서 IT用語辞典、e-word【オペコード】
[2] 웹사이트 Machine Language For Beginners - Introduction https://web.archive.[...]
[3] 웹사이트 IBMのドキュメント, opcodes in assembler https://www.ibm.com/[...]
[4] 웹사이트 Assembly Language Opcodes https://paws.ketteri[...]
[5] 웹사이트 Intel 80x86 Assembly Language OpCodes http://www.mathemain[...]
[6] 웹사이트 bytecode Definition http://www.pcmag.com[...]
[7] 웹인용 A Minimal CISC http://homepage.cs.u[...] The University of Iowa, Department of Computer Science 2016
[8] 저널 A Minimal CISC http://dl.acm.org/ci[...] Association for Computing Machinery|ACM 2016-05-28
[9] 서적 Application of CLP to instruction modulo scheduling for VLIW processors https://books.google[...] Jacek Skalmierski Computer Studio 2016-05-28
[10] 웹인용 Multiple Instruction Issue https://people.cs.cl[...] School of Computing, Clemson University 2016-05-28
[11] 저널 Finding Binary Clones with Opstrings & Function Digests http://www.drdobbs.c[...] 2017-03-27
[12] 저널 Finding Binary Clones with Opstrings & Function Digests http://www.drdobbs.c[...] 2016-05-28
[13] 웹인용 Javassist, a Java-bytecode translator toolkit http://www.docjar.or[...] 2016-05-27



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com