본문 바로가기
Computer Architecture/Basic

명령어의 Operation code, Operand 와 Addressing mode (주소 지정 방식)

by FastBench 2023. 4. 3.

초안 :  2023.04.02

 

 

어셈블리 명령어는 operation code 와 operand 로 구성되어 있다.

 

명령어가 수행할 연산 을 operation code 라고 하고, 연산에 사용할 데이터 또는 위치를 operand 라고 한다.

예를들어 아래의 명령어에서 add 는 operation code 이고 eax, edx 는 operand 이다.

 

add eax, edx

 

여기서 eax 와 edx 는 CPU 의 레지스터 주소 인데, 이와 같이 operand field 에는 데이터나 메모리, 레지스터의 주소가 올 수 있다. 대부분의 경우 데이터를 직접 명시하기 보다는 데이터가 저장된 위치(주소)가 명시된다. 따라서 operand field 를 address field 라고 부르기도 한다.

 

참고: 커맨드의 종류에 따라 필요한 operand 의 개수는 다르다.

 

왜 operand field 에는 주로 데이터가 저장된 위치(주소)를 담을까? 명령어의 길이 때문이다.

만약 명령어가 n 비트이고, 그중 operation code 가 m비트라면

operand field 의 가능한 길이는 n-m 비트가 된다. 만약 커맨드가 three address command 라면 한 operation field 의 길이는 더 작아질 것이다. 그러나 만약 operand field 안에 메모리 주소가 담기면, 표현할 수 있는 데이터의 크기는 한 메모리 주소의 저장공간만큼 커지게 된다. (ex, 64비트)

 


 

operatin code 가 사용할 데이터가 저장된 위치(=연산의 대상이 되는 데이터가 저장된 위치)를 effective address (유효 주소) 라고 한다.

 

연산에 사용할 데이터 위치를 찾는 방법은 addressing mode (주소 지정 방식) 이라고 하는데  CPU 종류에 따라 사용하는 addressing mode 는 다르다. 대표적인 5개를 아래에 나열했다.

 

1. immediate addressing mode (즉시 주소 지정 방식)

위에 설명한 바와 같이 연산에 사용할 데이터를 operand field 에 직접 명시하는 방식이다. 표현할 수 있는 데이터의 크기가 작아지는 단점이 있지만, 연산에 사용할 데이터를 메모리나 레지스터로 부터 찾는 과정이 없기에 빠르다는 장점이 있다.


2. direct addressing mode (직접 주소 지정 방식)
operand field 에 effective address 를 직접적으로 명시하는 방식이다. 1에 비하면 표현할 수 있는 데이터의 크기는 더 커졌지만, 여전히 effective address 의 범위는 명령어 비트 - operation code 비트 만큼 줄어든다. 즉, effective address에 제한이 생길 수 있다.

 

3. indirect addressing mode (간접 주소 지정 방식)
effective address 가 명시된 메모리 주소를 operand field 에 명시한다. 2에 비하면 표현할 수 있는 유효주소의 범위가 넓어졌지만, 두번의 메모리 접근이 필요하기에 느리게 동작한다.


4. register addressing mode (레지스터 주소 지정 방식)
direct addressing mode 와 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 operand field 에 직접 명시하는 방법이다. 메모리가 아닌 CPU  내부에 있는 레지스터에 접근하므로 속도가 빠르지만, direct addressing mode 와 비슷하게 표현할 수 있는 레지스터 크기에 제한이 생길 수 있다.


5. register indirect addressing mode (레지스터 간접 주소 지정 방식)
연산에 사용할 데이터를 메모리에 저장하고, 해당 주소(effective address)를 저장한 레지스터를 operand field 에 명시하는 방법이다. indirect addressing mode 와 비슷하지만, 메모리 접근이 한번만 이루어지므로 더 빠르다.

 

6. stack addressing mode (스택 주소 지정 방식)

스택과 스택포인터를 이용한 주소지정방식이다. 스택 포인터는 다음 게시글에서 다룬다.

간단히 설명하면, 스택포인터는 스택에 데이터가 채워지거나 꺼내질때, 메모리 스택 영역의 어디까지 데이터가 채워져있는지를 가리킨다. 이를 이용한 주소 지정방식이 stack addressing mode 이다. 자세한 내용은 다음 게시글 참조.

 

7. displacement addressing mode (변위 주소 지정 방식)

operand field 값과 특정 레지스터 값을 더하여 effective address를 얻어내는 주소 지정 방식이다.

여기서도 가장 대표적인 relative addressing mode 와 base register addressing mode  두가지를 알아보자.

 

     7-1 relative addressing mode

CPU 내의 PC 라는 레지스터에는 메모리에서 읽어들일 명령어의 주소가 저장되어 있다.

해당 PC 값과 명령어의 operand field 를 더하여 effective address 를 얻는 방식을 relative addrssing mode 라고 한다.

예를 들어 if 문과 같은 명령어에서 사용된다.

    7-2 base-register addressing mode

다음 게시글에서 베이스 레지스터에 대해 다루겠지만, 프로그램이 메모리에 저장될 때 가장 첫번째 주소를 base address 라고 하는데, 해당 주소가 저장되는 레지스터가 base register 이다.

위에서 다룬 relative addressing mode 의 PC를 Base register 로 바꾼것과 동일하게 동작한다.

 

 

Reference

  • 혼자 공부하는 컴퓨터 구조 + 운영체제, 한빛미디어, 강민철

'Computer Architecture > Basic' 카테고리의 다른 글

CISC 와 RISC  (0) 2023.04.08
CPU 성능을 올리기 위한 설계 방법  (0) 2023.04.07
스레드(thread)와 멀티 스레드 CPU  (0) 2023.04.06
인터럽트(Interrupt)  (0) 2023.04.05
프로세서 내부의 레지스터  (0) 2023.04.04

댓글