오래 못 할 짓 하지 않기
[ 컴퓨터 구조 ] 2. Addressing Mode 본문
- 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://blackinkgj.github.io/ISA/
'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글
[ 컴퓨터 구조 ] 4. MIPS 에 관하여 (0) | 2023.09.17 |
---|---|
[ 컴퓨터 구조 ] 3. Instruction Set Completeness (0) | 2023.09.11 |
컴퓨터 구조 1 (0) | 2023.09.01 |
[ 컴퓨터 구조 ] 16. (Hazard) Flushing logic (0) | 2023.07.11 |
[ 컴퓨터 구조 ] 15. (Hazard) Data Forwarding logic (0) | 2023.07.10 |