- 명령어는 피연산자 필드를 사용하여 데이터의 위치에 대한 정보 제공
- 주소 지정 방식(addressing mode): 명령어의 일부인 피연산자 필드를 사용하여 데이터 가 실제 위치한 유효 주소(effective address)를 결정하는 방법
- 지금까지는 메모리 주소를 냅다 피연산자로 넣음, but 비효율적일 수 o
- 최근 아키텍처는 효율적인 데이터 위치 지정을 위해 다양한 주소 지정 방식을 제공
- 주소 지정 방식은 몇 단계를 거쳐 데이터에 접근하는가로 구분
- 단계가 깊을수록 데이터 참조 시간이 오래 걸리는 단점이 있지만 더 많은 데이터를 다양한 방법으로 보관하는 장점 제공
유효주소 계산식 표기
r
: 레지스터 주소
Reg[x]
: 레지스터 x의 내용
a
: 메모리주소
M[x]
: 메모리 x번지의 내용
ea
(effective address) : 참조되는 데이터를 포함하는 실제 주소, 유효 주소
0-단계 주소 지정

- 데이터 위치 파악에 특별한 과정이 없는 방법 = 데이터의 위치가 없는 방법
- 즉치 주소지정(immediate addressing mode)
- 피연산자 필드에 직접 데이터가 들어 있음
- 묵시 주소지정(implied addressing mode)
- 누산기나 PC 등과 같은 정해진 기억장치에 데이터가 저장
- 항상 정해진 장소에 데이터가 있으므로, 데이터 위치를 명시할 필요 x
⇒ 일반적이지 x
1-단계 주소 지정
- 유효 주소를 확정하기 위해 주소 계산이나 읽기 연산 과정을 1회 수행
- 데이터의 위치를 확정하기 위해 명령어의 피연산자 필드를 주소로 사용
2-단계 주소 지정
- 유효 주소를 확정하기 위해 주소 계산이나 읽기 연산 과정을 2회 수행
- 레지스터 간접 주소 지정(register-indirect addressing),
ea = Reg[r]
- 레지스터 주소 → 메모리 주소 → 데이터
- 피연산자로 레지스터 주소 줌
- 포인터변수처럼 사용
- 메모리 간접 주소 지정(memory-indirect addressing),
ea = M[a]
- 메모리 주소 → 메모리 주소 → 데이터
- 메모리 주소 공간이나 메모리 용량의 제약을 해결
- 두번의 메모리 접근 필요
- 변위 주소 지정(displacement addressing),
ea = Reg[r] + a
- 메모리 주소 + (레지스터 주소→ 메모리 주소) → 데이터
- 명령어에 포함 된 2개의 피연산자 필드를 사용하여 메모리의 주소를 확정
- 한 개의 피연산자에 지정된 메모리 주소1과 또 다른 피연산자에 지정된 레지스터 주소에 저장된 메모리 주소2를 더하여 유효 메모리 주소 지정
- 피연산자 필드 두개 사용, 얼마나 떨어져있는지의 값 지정
- 메모리 중 하나가 베이스, 다른 하나가 디스플레이스먼트
- 레지스터를 따라가면 메모리 주소 존재 ⇒ 메모리 주소가 2개 저장되어있음, 얘네를 더하면 최종 데이터의 주소가 나옴
❓그럼 왜 이렇게 복잡하게 쓰냐? 아래 방식에서 유용- 색인 주소 지정(indexed addressing)
- 배열을 쓰는 경우 유리(c언어 같이 배열이 원소의 크기만큼 차례대로 나열되어 있는 경우)
- i번째 배열의 주소 = 배열 시작 주소 + 인덱스(i) * 사이즈
- 메모리주소1 = 배열의 시작 주소(베이스)
- 레지스터주소 = 변위(ex) int크기(4), char크기(1)) 값
- 변위: 인덱스 * 원소 사이즈
- 레지스터 주소 안에 인덱스 변위만 바꿔주면 해당하는 데이터에 쉽게 접근 가능
- 이런 명령이 없으면 베이스 주소로부터 더하는 명령어를 따로 생성해줘야함
- 배열을 쓰는 경우 유리(c언어 같이 배열이 원소의 크기만큼 차례대로 나열되어 있는 경우)
- 베이스 주소 지정(base addressing)
- 재배치할 때 사용
- 메모리 주소1에 모듈의 상대 주소를 지정하고, 레지스터에 재배치 주소를 베이스로 지정하여 손쉽게 모듈을 재배치(relocation)
- ex) 메모리 주소1에 0번지부터 시작하는 메모리 주소 저장 메모리 주소2(베이스)에 할당된 메모리의 시작 주소 저장 ⇒ 레지스터에 있는 값만 바꾸면 재배치 가능
- PC 상대 주소 지정(PC-relative addressing)
- PC를 베이스로 사용하여 상대 주소를 지정하는 방법
- PC를 명시할 필요가 없으므로 상대 주소를 지정하기 위한 하나의 피연산자 피연산자 1개 but 2개의 값 가지고 계산
- 오프셋은 음수 값 가질 수 o
- 현재 명령어에서 오프셋 값을 주면 그 위치를 기준으로 pc위치 지정 가능, 원래는 2비트 뒤로 이동
- 주로 분기 명령어에서 사용
Uploaded by N2T
'이론 > 컴퓨터구조' 카테고리의 다른 글
데이터 형식, 정수 (1) | 2023.12.06 |
---|---|
복잡도에 따른 명령어 집합 (1) | 2023.12.04 |
명령어와 메모리 (0) | 2023.11.27 |
피연산자의 수와 명령어 집합 (0) | 2023.11.24 |
연산의 종류 (1) | 2023.11.20 |
댓글