7.Direct 모드와 Indirect 모드

Direct 모드와 Indirect 모드

 

Direct 모드 명령어 구성의 문제점

 

변수 b가 담겨 있는 메모리 주소값 0x0100은 source의 8비트 공간에 담길 수 없다.

 

그래서 LOAD r2 0x0100 명령어는 표현이 불가능하다. (구성불가)

 

위와 같은 방법을 Direct 모드라고 하는데 , 이방법을 통해서는 메모리의 모든 영역에 대한 접근이 불가능하다. 

왜냐면 Direct 모드로 메모리를 접근할 경우, 할당 된 비트 수 안에서 표현 가능한 범위의 메모리 영역만 

접근이 가능하기 때문이다.

 

 

어떻게 해결해야 하나?

 

 

 

Direct 모드와 Indirect 모드 표현

 

 

 

Indirect 모드 는 [ 0x10] 번지에 가서, 거기에 있는 주소값으로 이동해서 그 값을 레지스터 r1 으로로 이동시켜라.

 

제일 위에서 LOAD  명령어에서는 레지스터에 저장할 데이터가 존재하는 메모리 주소값을 직접 표현했다.

 

반대로 Indiect 모드라 한다면, 명령어에서 지정하는 번지에 저장된 값을 주소 값으로 참조하게 된다.

 

 

Indirect 모드로 문제 해결

 

ADD 0x100 .. 이라는 명령어를 표현할 수 없는 문제!

 

 

a 변수를 레지스터로 이동

LOAD r1 , 0x0010

 

메모리 0x100 번지에 저장된 b 변수를 레지스터로 어떻게 이동시킬까?

LOAD r2, 0x0100을 대신할 Indirect 모드 명령어는 아래와 같다.

 

 

0x0100은 십진수로 256이다. 

이 숫자를 먼저 만들어 보자.

 

사칙연산 명령어 구조를 보면 피연산자로 상수가 올때 나타낼 수 있는 값의 범위가 0~ 7까지다.

이숫자를 이용해서 0x0100 (256)을 조합해야 한다. 

 

아래 그림처럼 MUL 명령어를 이용해서 4 x 4로 r0에 16을 저장하고 r2에 16을 저장한 뒤

두 값을 곱한 256값을 r3에 저장했다. 참고로 레지스터는 16비트라서 6만5천 정도의 값을 저장가능하다.

그래서 r3에 256을 저장 할 수 있다. 

 

이 r3에 저장된 256을 0x0030에 저장을 한다.

 

0x0030에는 십진수로 256, 16진수로 0x0100 즉 주소값이 들어가 있다. 

 

그리고 Indirect 모드로 LOAD 한다. [0x0030] 에가서 0x0100의 주소값을 얻어서 그곳으로 가서 값을 가져온다. 

 

그리고 최종적으로 ADD 한다.

 

 

 

참고 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 정리 - 한빛출판네트워크

 

 

 

 

'컴퓨터 기초 > 운영체제 이론' 카테고리의 다른 글

10.커널오브젝트와 핸들의 종속관계  (0) 2021.01.20
9.커널 오브젝트  (0) 2021.01.19
6.Load * Store 명령어 디자인  (0) 2021.01.18
5.컴퓨터 구조  (0) 2021.01.18
4.Win32비트 Vs Win64비트  (0) 2021.01.18