Computer Science/컴퓨터 구조

컴퓨터 구조 - 명령어의 구조

HongongHB 2024. 1. 5. 16:42

명령어 구조

연산 코드 오퍼랜드
  • 명령어는 연산 코드와 오퍼랜드로 구성되어 있습니다.
  • 명령어가 수행할 연산을 연산 코드(operation code)라고 합니다. 연산 코드는 연산자입니다.
  • 연산에 사용할 데이터가 저장된 위치를 오퍼랜드(operand)라고 합니다. 오퍼랜드는 피연산자입니다.
  • 연산 코드가 담기는 영역을 연산 코드 필드, 오퍼랜드가 담기는 영역을 오퍼랜드 필드(주소필드)라고 합니다.
  • 기계어, 어셈블리어 또한 명령어이기 때문에 연산 코드와 오퍼랜드로 이루어져있습니다.

붉은 글씨가 연산 코드, 검은 글씨가 오퍼랜드입니다.

  • 오퍼랜드가 n 개면 그 명령어를 n - 주소 명령어라고 합니다.

 

연산 코드

  • 연산 코드는 명령어가 수행하는 연산을 의미합니다. '더해라' / '빼라' / '저장해라' 등의 연산을 수행합니다.
  • 연산 코드의 종류는 매우 많지만, 가장 기본적인 연산 코드 유형은 크게 4가지입니다.
    • 데이터 전송 : MOVE, STORE, LOAD, PUSH, POP
    • 산술/논리 연산 : ADD / SUBTRACT / MULTIPLY / DIVIDE, INCREMENT / DECREMENT, AND / OR / NOT, COMPARE
    • 제어 흐름 변경 : JUMP, CONDITIONAL JUMP, HALT, CALL, RETURN
    • 입출력 제어 : READ, WRITE, START IO, TEST IO

 

주소 지정 방식

  • 명령어의 오퍼랜드 필드에는 메모리나 레지스터의 주소를 담는 경우가 많습니다. 그래서 오퍼랜드 필드를 주소필드라고도 부릅니다.
  • 오퍼랜드 필드에 연산 코드에 사용될 데이터를 직접 담지 않고 메모리나 레지스터의 주소를 담는 이유는 명령어의 길이 때문입니다. 예를 들어, 명령어의 크기가 16 bit입니다. 그 중 연산 코드 필드가 4 bit 일 때, 1-주소 명령어라면 오퍼랜드의 크기는 16-4 = 12 bit가 됩니다. 2-주소 명령어라면 (16-4) / 2 = 6 bit가 됩니다.
연산 코드(4 bit) 오퍼랜드(6 bit) 오퍼랜드(6 bit)
  • 한 주소에 16 bit를 저장할 수 있는 메모리가 있다고 가정하겠습니다. 이 메모리에 데이터를 저장하고, 이 메모리의 주소를 오퍼랜드에 명시한다면 다음과 같은 그림이 됩니다.

  • 이처럼 연산에 사용할 데이터가 저장된 위치를 유효 주소(effective address)라고 합니다.
  • 주소 지정 방식에는 크게 5가지가 있습니다.
    • 즉시 주소 지정 방식(immediate addressing mode) : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시합니다. 데이터가 크기가 작다는 단점이 있지만, 연산에 사용할 데이터에 바로 접근할 수 있어 다른 주소 지정 방식보다 빠릅니다.
    • 직접 주소 지정 방식(direct addressing mode) : 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방법입니다. 즉시 주소 지정 방식보다는 데이터의 크기가 커졌지만, 여전히 유효주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어듭니다.
    • 간접 주소 지정 방식(indirect addressing mode) : 오퍼랜드 필드에 유효 주소의 주소를 명시하는 방법입니다. 직접 주소 지정 방식보다 유효 주소를 표현할 수 있는 크기가 더 커지지만, 메모리에 2번 접근해야하기 때문에 일반적으로 느린 방식입니다.
    • 레지스터 주소 지정 방식(register addressing mode) : 연산에 사용할 데이터를 레지스터에 저장하고 그 레지스터를 오퍼랜드 필드에 명시하는 방법입니다. 레지스터는 CPU 내부에 있기 때문에 메모리에 접근하는 것보다 더 빠릅니다. 다만, 레지스터 주소 지정 방식은 직접 주소 지정 방식과 비슷하게 표현할 수 있는 크기가 레지스터 크기로 제한됩니다.
    • 레지스터 간접 주소 지정 방식(register indirect addressing mode) : 연산에 사용할 데이터를 메모리에 저장하고, 그 유효주소를 레지스터에 저장하여 그 레지스터를 오퍼랜드 필드에 명시하는 방법입니다.

 

공부 내용에 쓰인 이미지는 유튜브 채널 '개발자 강민철' 에서 스크랩했습니다.

https://www.youtube.com/@kangminchul