명령어 (10) - 주소 지정

컴퓨터구조

2020. 4. 8. 14:44

0. 주소지정방식 (Addressing)

주소지정방식은 일반적으로 4가지로 나눌 수 있는데, 묵시(암시)적 지정방식, 즉치 지정방식, 레지스터 지정방식, 변위 지정방식이다. 여기에서 레지스터 지정방식은 직접/간접 지정방식으로 나뉘며, 변위 지정방식은 상대주소/인덱스/자동인덱싱 등으로 더욱 세분화 할 수 있다. 사용되는 레지스터나 명령어에 따라 주소지정방식이 다르다.

 

1. 묵시(암시)적 주소 지정방식 (Implicit)

  • 명령어에서 주소필드를 필요로 하지 않는 방식이다.
  • 연산 코드 필드에 지정된 묵시적인 오퍼랜드를 사용한다.
  • 예를 들면 스택에서의 add; 와 같다. 기억장치 스택에서 add와 같은 명령어는
  • 스택의 맨 위 항목과 그보다 한칸 아래 항목을 더하여 다시 스택의 맨 위에 저장하는 명령어이다.
  • 이런식으로 implicit하게 코드에는 들어나지 않지만 명령어가 암시적으로 지정되어있고,
  • 이러한 주소를 명령어에서 사용하는 주소지정방식이다.

 

2. 즉치 주소지정방식 (Immediate)

  • 데이터가 명령어에 포함되어있는 방식이다. 
  • 오퍼랜드에 그냥 데이터 그 자체가 적혀있기 때문에, 데이터를 인출하기 위해서 기억장치 (메모리, 레지스터 등)에 접근할 필요가 없는 명령어를 의미한다.
  • 상수값의 범위가 오퍼랜드의 크기에 의해 제한될 수 밖에 없다 (이는 당연하다)
  • addi와 같은 명령어들이 즉치 주소지정방식을 사용한다.

 

3. 레지스터 주소지정방식 (Register)

  • 직접 주소지정방식 (Direct Addressing) : 연산에 사용할 데이터가 레지스터에 저장되어 있는 방식. 레지스터 안에 값이 있다.
  • 간점 주소지정방식 (Indirect Addressing) : 연산에 사용할 데이터가 다른 공간에 있고, 레지스터에 그 주소가 저장된 방식. C언어의 포인터를 생각하면 이해가 빠르다. 즉 레지스터 안에 주소가 있다.

 

4. 변위 주소지정방식 (Displacement)

변위 주소지정방식은 이전 글에서 설명한 것 처럼 어떠한 유효주소 = 변위주소 + N과 같이 동작하는 주소 지정방식이다. 대표적으로 배열이 변위주소지정방식을 따르는데, 잘 알다시피 배열의 어떤 인덱스에 접근할 때 base + offset을 사용하여 주소에 접근한다. 아래에 세가지 세부종류가 있는데 이는 변위주소 + N에서 N이 어떤 값이 되느냐에 따라 나뉜다.

 

  • 상대주소 지정방식 : 유효주소를 계산하기 위해 특정 레지스터 내용에 명령어 주소 필드 값을 더하는 방식으로 PC와 분기명령(beq) 등에서 쓰임. 인덱스 주소방식과 차이는 주소필드 + N에서 N이 다른 특정 레지스터의 내용이라는 것임.
  • 인덱스 주소지정방식 : 유효주소를 계산하기 위해 인덱스를 사용하는 방식인데, 명령어 주소필드 + 인덱스 계산값을 사용한다. 이 인덱스는 특별하게 IX라는 인덱스 레지스터에 저장된다. 
  • 자동 인덱싱 방식 : 자동증가/감소 레지스터를 사용하여 레지스터의 값이 접근할 때마다 증가/감소된다. 이 자동증가/감소 레지스터의 값과 명령어 주소필드 값을 더해서 유효주소를 만들어낸다. (대표적으로 PC가 그러하다)

 

5. Reference

 

주소 지정 방식

일단 기본적인 용어 세가지에 대해서 알아보자. - 인스트럭션이란 CPU를 동작시키기 위한 명령을 지시하는 기계어로 이루어져 있는 명령어 명령부( op code )와 처리부( operand )로 나눠진다. - 프로그램 저장 방..

iamswdeveloper.tistory.com