몰입하는 개발자

An immersive developer/researcher

공대생 김모립/컴퓨터구조

명령어 구조

jiankimr 2023. 4. 4. 04:52

하나의 명령어를 자세히 들여다보며

연산 코드, 오퍼랜드, 주소 지정 방식이라는 개념에 대해 알아보자.

 

<Intro>

*명령어는 '무엇을 대상으로', '어떤 작동을 수행하라'는 구조로 되어 있다.

*명령어는 연산코드와 오퍼랜드로 구성되어 있다.

 

<명령어>

연산코드(operation code) : 명령어가 수행할 연산(작동)

오퍼랜드(operand) : 연산에 사용할 데이터 or 연산에 사용할 데이터의 위치

*연산코드는 '연산자', 오퍼랜드는 '피연산자'라고 부른다.

연산코드 필드 : 연산 코드가 담기는 영역

오퍼랜드 필드 : 오퍼랜드가 담기는 영역

* 명령어의 종류와 생김새는 CPU마다 다르다. (따라서 연산 코드의 종류와 생김새도 CPU마다 다르다.)

 

<오퍼랜드(operand)>

연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미

오퍼랜드 필드에는 숫자와 문자 등을 나타내는 데이터 or 메모리 or 레지스터 주소가 올 수 있다.

오퍼랜드 필드에는 숫자나 문자와 같이 연산에 사용할 데이터를 직접 명시하기 보다는, 많은 경우 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담긴다.

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

오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 한 개만 있을 수도 ㅇㅆ고, 두 개 또는 세 개 등 여러 개가 있을 수도 있다.

*0-주소 명령어 : 오퍼랜드가 하나도 없는 명령어

*1-주소 명령어 : 오퍼랜드가 한 개인 명령어

*2-주소 명령어 : 오퍼랜드가 두 개인 명령어

*3-주소 명령어 : 오퍼랜드가 세 개인 명령어

 

<연산코드(operation code)>

명령어가 수행할 연산을 의미한다.

기본적인 연산 코드 유형은 크게 네 가지다.(이 외에도 매우 다양한 종류가 존재)

* 데이터 전송

* 산술/논리 연산

* 제어 흐름 변경

* 입출력 제어

 

<주소 지정 방식>

 "왜 operand 필드에 메모리나 레지스터의 주소를 담는 건가요? 그냥 <연산 코드, 연산 코드에 사용될 데이터> 형식으로 명령어를 구성하면 되지 않나요?"

이는 명령어의 길이 때문이다. 명령어(오퍼랜드)에 데이터를 바로 담는다면 그 오퍼랜드의 데이터 크기만큼만 data를 담을 수 있지만, 주소 정보를 연결하면 그 연결된 주소의 공간까지 사용할 수 있게 된다. 즉 오퍼랜드 필도르ㅗ 표현할 수 있는 데이터 크기가 커진다. 

연산코드에 사용할 데이터가 저장된 위치, 즉, 연산의 대상이 되는 데이터가 저장된 위치를 '유효주소(effective address'라고 한다. 만약 어떤 오퍼랜드가 10번지라는 메모리 주소를 명시하거나, R1이라는 레지스터를 명시한다면 그 10번지나 R1이 유효주소가 된다.

주소 지정 방식(addressing mode) : 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식이라고 한다. 다시 말해, 주소 지정 방식은 유효 주소를 찾는 방법이다.

현재 CPU는 다양한 주소 지정 방식을 사용한다. 대표적인 주소 지정 방식에는 5가지가 있다.

*즉시주소지정방식(immediate addressing mode) : 오퍼랜드 필드에 주소가 아니라 연산에 사용할 데이터를 바로 명시. 표현할 수 있는 데이터의 크기가 작아지지만, 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 괒어이 없기 때문에 다른 방식들보다 빠르다.

*직접주소지정방식(direct addressing mode) : 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방법. 오퍼랜드에서 표현할 수 있는 데이터의 크기는 즉시 주소 지정 방식보다 더 커졌지만, 여전히 유효 주소를 표현할 수 있는 범위는 연산 코드의 비트 수만큼 줄어든다.

*간접주소지정방식(indirect addressing mode) : 유효주소의 주소를 오퍼랜드 필드에 명시한다. 앞서 설명한 것들보단 느리지만, 직접 주소 지정 방식보다 표현할 수 있는 유효주소의 범위가 넓어진다.

*레지스터 주소 지정 방식(resgister addressing mode) : 직접 주소 지정방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드필드에 직접 명시하는 방법이다. 일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠르다. 그러므로 레지스터 주소 지정 방식은 직접 주소 지정 방식보다 빠르게 데이터에 접근할 수 있다. 다만 직접 주소 지정 방식과 비슷한 문제로, 표현할 수 있는 레지스터 크기에 제한이 생길 수 있다.

* 레지스터 간접 주소 지정 방식(register indirect addressing mode)은 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효주소)를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법. 

 

주소 지정 방식 operand field에 명시하는 값
즉시 주소 지정 방식 연산에 사용할 데이터
직접 주소 지정 방식 유효 주소(메모리 주소)
간접 주소 지정 방식 유효 주소의 주소
레지스터 주소 지정 방식 유효 주소(레지스터 이름)
레지스터 간접 주소 지정 방식 유효주소를 저장한 레지스터

 

<작성 참고자료>

혼자 공부하는 컴퓨터 구조+운영체제(지은이 강민철)

'공대생 김모립 > 컴퓨터구조' 카테고리의 다른 글

ALU와 제어장치  (0) 2023.04.10
(1) 컴퓨터 구조 개관  (0) 2023.03.29
(0) 컴퓨터구조를 배워야 하는 이유  (0) 2023.03.29