메모리에 있는 값을 가져오는 방식은 Direct모드와 Indirect 모드가 있다.

LOAD, STORE 명령어 사용시  제한적인 비트 사용 범위 때문에 메모리 접근 범위가 제한된다.

이러한 문제를 해결하기 위해서 Indirect 모드를 사용한다.


Direct Addressing Mode

- 메모리에 있는 값을 그대로 레지스터로 LOAD하는 모드


Indirect Addressing Mode

- 메모리에 있는 값이 주소값이며, 그 주소값을 참조해 메모리에 있는 값을 레지스터로 LOAD하는 모드


비트 사용 범위 제한 때문에 표현 가능한 메모리 주소 범위를 벗어난 경우 InDirect 모드를 사용하게 되는데, 다음과 같다.


ex) 

int a = 10;         //0x0010 번지 할당

int b = 20;         //0x0100 번지 할당

int c = 0;           //0x0020 번지 할당


비트 사용 범위 제한 때문에 b(0x0100)을 표현 할 수 없다.


1. 사칙연산을 통해서 0x0100 이라는 값을 생성한다.


2. 0x0100을 레지스터에 저장한다. (저장된 레지스터는 r3)


3. 레지스터에 저장된 0x0100을 표현 가능한 메모리 공간에 STORE 한다. (STORE r3, 0x0030)


4. 그럼 메모리 0x0030에는 0x0100이라는 주소값이 들어가게 된다.


5. 'LOAD r2, [0x0030]' 명령어를 이용해서 0x0030이 가리키는 곳의 값을 레지스터 r2에 LOAD한다.


이런식으로 표현 가능 범위를 벗어난 메모리 공간에 접근하는 방식을 Indirect Addressing 모드라고 한다.



+ Recent posts