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
'컴퓨터구조' 카테고리의 다른 글
명령어 (13) - 대소 비교 (<) (0) | 2020.04.08 |
---|---|
명령어 (12) - 조건 연산, J Format (0) | 2020.04.08 |
명령어 (11) - 논리 연산 (0) | 2020.04.08 |
명령어 (9) - I Format (0) | 2020.04.08 |
명령어 (8) - R Format (0) | 2020.04.08 |
명령어 (7) - 이진 표현법 (0) | 2020.04.08 |
명령어 (6) - Immediate 오퍼랜드, 상수 Zero (0) | 2020.04.08 |