본문 바로가기

Computer Science/Computer Architecture

[Computer Architecture] 주소 지정 방식

+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.

주소 지정 방식 (addressing mode)

명령어의 피연산자 필드를 사용하여, 데이터 유효 주소(effective address)를 결정하는 방식이다.

데이터 유효 주소: 메모리나 저장 장치에 실제로 유효한 데이터가 저장되어 있는 위치를 가리키는 주소

0-단계 주소 지정 방식

- 유효 주소를 확정하기 위해 연산 과정을 0번 수행한다.

- 데이터 유효 주소를 명시하지 않는다.

 

1-단계 주소 지정 방식

- 유효 주소를 확정하기 위해 연산 과정을 1번 수행한다.

- 피연산자 필드가 데이터 유효 주소이다.

 

2-단계  주소 지정 방식

- 유효 주소를 확정하기 위해 연산 과정을 2번 수행한다.

- 피연산자 필드가 데이터의 유효 주소를 가리키는 주소이다.


0-단계 주소 지정 방식

즉시 주소 지정 방식 (immediate addressing mode)

명령어 피연산자 필드에 실제 데이터가 포함된다.

- 명령어 decode시에 사용할 데이터가 바로 인출된다.

 

프로그램의 초기 환경 값을 세팅할 때 자주 사용된다.

- 작은 정수 데이터나, 상수같이 변경없이 쓰는 데이터에 사용된다.

 

장점: 레지스터 엑세스조차 없이 수행되므로 매우 빠르다.

단점: 피연산자 크기 만큼 제한된 bit 수로 표현할 수 있는 정수나 상수 등 제한적으로 사용된다.

즉시 주소 지정 방식의 명령어

묵시적 주소 지정 방식 (implied addressing mode)

명령어 실행에 필요한 데이터의 위치가 묵시적으로 지정되어있다. (미리 정의)

- 누산기나 스택 등 정해진 장소의 데이터를 사용한다.

ex) SHL 명령어: 누산기 내용을 좌측으로 시프트(shift)

 

장점: 명령어 길이가 짧고, CPU 내에서 연산을 수행한다.

단점: 컴퓨터 구조나 명령어에 따라 제한적으로 사용할 수 있다.

묵시적 주소 지정 방식의 명령어


1-단계 주소 지정 방식

레지스터 주소 지정 방식 (register addressing mode)

(실제) 데이터는 한 레지스터에 저장되어 있고, 명령어 피연산자는 해당 레지스터의 주소를 포함한다.

 

레지스터 필트가 k bit일 때, 주소 지정에 사용될 수 있는 레지스터들의 수는 2^k개이다.

 

장점: 데이터 접근을 위한 메모리 엑세스가 없고, 피연산자 필드의 bit 수가 적어도 무방하다.

단점: CPU 내 레지스터로 데이터 저장 공간이 제한된다.

 

EA = R (EA: Effective address, R: 명령어 피연산자 필드가 명시하는 Register 주소)

=> 데이터 유효 주소 = 레지스터 주소

레지스터 주소 지정 방식의 명령어

직접 주소 지정 방식 (direct addressing mode)

데이터는 메모리에 저장되어 있고, 명령어 피연산자는 해당 메모리 주소를 포함한다.

 

장점: 데이터 접근을 위해 한 번의 메모리 엑세스가 발생하고, 더 많은 메모리(메인 메모리) 활용이 가능하다. (이 후와 비교)

단점: 연산 코드를 제외하고 남은 bit로 메모리 주소 bit로 사용해야하므로 직접 지정할 수 있는 기억장소의 수가 제한된다. (피연산자의 크기만큼만 메모리 주소를 가리킬 수 있다. 피연산자의 크기를 늘리면, 명령어의 크기가 커진다.)

 

EA = A (EA: Effective address, A: 명령어 피연산자 필드가 명시하는 Memory 주소)

직접 주소 지정 방식의 명령어


2-단계 주소 지정 방식

레지스터 간접 주소 지정 방식 (register-indirect addressing mode)

명령어 피연산자 필드가 가리키는 레지스터의 내용을 유효 주소로 사용한다.

 

1단계: 피연산자 필드에 명시된 레지스터 주소를 읽는다.

2단계: 해당 레지스터의 내용이 가리키는 주소를 사용하여 메모리에 접근한다.

 

EA = Reg[x] (EA: Effective address, Reg[x]: 레지스터 x의 내용)

레지스터 간접 주소 지정 방식의 명령어

메모리 간접 주소 지정 방식 (indirect addressing mode)

명령어 피연산자 필드가 가리키는 메모리의 내용을 유효 주소로 사용한다.

 

1단계: 피연산자 필드에 명시된 메모리 주소를 읽는다.

2단계: 해당 메모리의 내용이 가리키는 주소를 사용하여 메모리에 접근한다.

 

장점: 지정할 수 있는 메모리 주소 공간의 제약을 해결한다.

단점: 2번의 메모리 접근이 필요하다.

메모리 간접 주소 지정 방식의 명령어

EA = Mem[x] (EA: Effective address, Mem[x]: 메모리 x의 내용)

변위 주소 지정 방식 (displacement addressing mode)

명령어 내 2개의 피연산자 필드를 사용하거나 1개의 레지스터를 추가 사용하여, 유효 주소를 확정한다.

- 직접 주소 지정 방식 + 레지스터 간접 주소 지정 방식

 

EA = Reg[x] + A (EA: Effective address, Reg[x]: 레지스터 x의 내용, A: 피연산자 필드가 명시한 메모리 주소)

 

베이스 - 레지스터 주소 지정 방식 (base-register addressing mode)

- 피연산자 필드 중 하나는 메모리 주소(베이스 주소)를 갖고 있는 레지스터 주소를, 다른 하나는 오프셋값으로 사용할 메모리 주소를 포함한다.

베이스 주소: 프로그램의 시작점을 가리키는 주소

오프셋 값: 베이스 주소으로부터 얼마나 떨어져 있는지

베이스 레지스터 주소 지정 방식의 명령어

PC 상대 주소 지정 방식 (relative addressing mode)

- PC 레지스터에 메모리 주소(베이스 주소)를 포함한다.

 (레지스터가 가리키는 메모리 주소는 시작점을 가리킨다.)

- 유일한 피연산자 필드는 오프셋값으로 사용할 메모리 주소를 포함한다.

PC 상대 주소 지정 방식의 명령어