오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 2. Addressing Mode 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 2. Addressing Mode

쫑알bot 2023. 9. 7. 13:57
728x90
  • Addressing mode

: operand 가 있는 메모리/레지스터를 나타내는 방법 모음

 

포인터를 사용하여 데이터를 나타내는 것이기 때문에 융통성 면에서 좋다고 함.

 

 

 

  • Effective Address (E.A.)

= 계산할 Operand를 포함한 주소

= 결과적으로 사용할 데이터가 있는 주소

 

AC : 명령어를 실행했을 때 얻게되는 데이터 값
EA : AC가 있는 주소

 

t1 레지스터에 , s1레지스터의 값 + 1000을 한 주소에 있는 값을 넣어라


 

Address 모드 

* direct ( 주소를 갖고있음. ) 

* indirect ( 주소를 가리키고 있는 애의 주소를 갖고있음)

 

 

1.Implied addressing mode

: 특별한 주소가 존재하지 않음

정확한 주소에 넣는다기보단 AC에다 다 떄려박는 느낌이라고 생각하면 된다.

▣ Stack에서 쓰임 / PUSH A , POP A

 


2. Immediate addressing mode

 

 

 

 

 

 

 

 

 

 

 

Operand 가 값을 주소로 돌려서 안 갖고 즉시 계산할 수 있는 Value를 갖고있다. 

LD 5 -> immediate addressing 이면,
'그냥 지금 메모리 갈 시간 없으니까 데이터 5 빨리 가져와' 이런 뜻

- Operand의 위치 : Instruction

addi = s1레지스터에 , [ s2 레지스터에 있는 값 ] + 4 를 더한 값을 주소로 갖는 데이터를 가져온다.


3. Register addressing mode

Operand를 갖고있는 Register로 연산한다.

r0 ( 결과를 넣을 목적지 )
r1,r2 ( 계산할 값 ) 

LD 5 ➔ register mode
: '5번 레지스터의 값을 가져와'

- Operand의 위치 및 흐름: Register ( ← Instruction )

t0 레지스터에, [ t1레지스터의 값 ] + [ s1 레지스터의 값 ] 을 넣는다. (주소 X)


 

4. Register Indirect addressing mode 

각 레지스터들은 계산될 operands 가 있는 주소를 갖고있다.

LD 5 ➔ register indirect
: '5번 레지스터가 가진 값을 주소값으로 하는 값을 가져와'

Operand의 위치 : 메모리 ( ← Register )

 


 

 

5. Direct Addressing mode

 

Instruction에서 메모리에 있는 Operand를 가리킨다.

LD 5 ➔ direct mode
: '주소 5번에 있는 값을 가져와'

Operand의 위치 : 메모리 ( ← Instruction )

6. Indirect Addressing mode ( 거의 안 쓰임 =... 비효율적이라서)

[Operand를 가리키는 주소]의 주소를 갖고있다.

LD 5 ➔ indirect mode
: '5번 주소에 있는 값을 주소로 삼는 데이터의 값을 가져와'

Operand의 위치 : 메모리B ( ← B를 가리키는 메모리 A ) ( ← 메모리 A의 주소값 )

 


 

7. (PC) Relative Address mode

 

: PC의 값이 다음 Instruction의 주소를 가리킬 수 있도록 +a가 더해진다. a=4

 

(이건 PC값 조정하려고 하는 거임.)

 

 

처음 주소는 100이고, Instrcution은  bne 인데

   i)  두 개가 같으면 PC + 4 = 104 = add
   ii)              다르면 ( PC +4 ) + 3*4 = 116 = exit

 

- 3*4인 이유 : PC는 실행이 되는 순간 4를 더해놓는다.

그럼 아직 판단 중일 때 PC값은 104가 되고

exit으로 가야한다면 Instruction 3개를 넘어야 하므로 3*4가 된다

(1 word = 4 byte )

 

 

 

이거도 이해하면 좋을 듯.

위와 같은 내용이긴 한데, beq는 204 이지만 실행될 때 PC는 이미 208이 되어있다.

beq의 조건은 0이라고 했으니 t1에 0이 있으면 less(sub) 으로 가야한다.

- t1에 0이 있지 않으면 208인 PC값을 그대로 받아 진행하고

-                있으면 208 + less(sub) 이 있는 j까지 가기위한 (Instrction 의 개수 *4)를 더해준다. 

 

 

8. Base Register Addressing mode

그냥 데이터가 있는 주소를 가리키는 Register 1개 + 변위값을 가진 Register 1개

 

A주소값에 Register R값을 더한다

 

 

t1 register에 [s1 register 값 + 1000] 를 주소로 갖는 데이터를 넣는다.

그냥 기준이 되는 register하나 있고, 다른 데 정보 왔다갔다하면서 가져오는 register하나 있는 느낌.

 

 

한 번 풀어보기

 


 

비교

 

- Direct Addressing : 메모리에 한 번만 접근하면 되므로 빠르다.

   Indirect  "  "          : 메모리에 두 번 (혹은 그 이상) 접근해야 하므로 느리다.

하지만 Direct보다 더 많은 주소를 표현할 수 있다.
(정해진 메모리에서 주소를 표현해야 했는데 Indirect는 더 많이 표현 가능)

 

ex) 32bit로 제한되어 있으면 direct : 최대로 한다해도 opcode 빼고 나머지 비트를 쓰는데

indirect는 그냥 메모리에서 나온 값으로 하는 거니까 메모리에 1000000000가 있으면 그 주소까지 접근 가능

 

- Direct Addressing : 메모리를 더 차지함 (대신 레지스터보다 비용이 덜 들어서 싸다)

   Register  "  "        : 메모리까지 안 가도 돼서 더 빠르다.   // 대신 레지스터는 개수의 제한이 있음.(비싸서)

 

 

 

 

 

 

 

 

 

Immediate : 메모리 참조 필요없음 / operand 크기가 작음

Direct : 간단/ 주소 제한적 ( 나눠쓰기 때문에)

Indirect : 단점 여러번 참조를 해야함

Register : 메모리 참조 필요없음 / 주소 제한적(레지스터 몇개 없음)

Register indirect : 단점 메모리 참조가 필요

 

(출처) https://com24everyday.tistory.com/194

 

 

(직관적인 설명)

https://skagh.tistory.com/8



https://blackinkgj.github.io/ISA/

 

https://eeinger.tistory.com/2