CS/컴퓨터구조(Mano)

[컴퓨터구조] ch.8 중앙처리장치 (3) 어드레싱 모드

하늘아래현서 2024. 10. 9. 13:21
Mano의 컴퓨터시스템구조 제3판, 프로텍 미디어, 김종상 옮김 도서를 정리, 요약하는 글입니다.

 

1. 어드레싱 모드

- 명령어에서 연산 필드는 수행되어야 하는 연산을 지정하고 있다. 연산은 레지스터나 메모리에 있는 데이터에 대해 수행된다. 프로그램이 수행되는 동안 피연산자가 지정되는 방법은 어드레싱 모드에 의해서 결정된다. 어드레싱 모드는 실제의 피연산자를 지정하기 위해 명령어 속에 있는 주소 필드의 값을 수정하거나 다른 것으로 대체하는 것들을 규정한다. 어드레싱 모드는 포인터, 카운터 인덱싱, 프로그램 리로케이션 등의 편의를 제공하여 프로그래밍하는데 융통성을 주거나 명렁어 주소 필드의 비트를 줄이기 위해서 사용한다. 

- 컴퓨터의 기본 동작 사이클은 fetch, decode, excution이다. 명령어에서의 어드레싱 모드는 연산 코드와는 별도의 이진 코드를 통해서 나타내기도 하고 연산 코드와 함께 하나의 이진 코드로 나타내기도 한다. 하나의 명령어에 두 개 이상의 어드레싱 모드를 포함할 수도 있다. 

 

- 여기서 Mode 필드가 피연산자의 위치를 식별하는 방식을 결정한다. 

 

 

(1) implied 모드

- 피연산자가 묵시적으로 명령어의 정의에 따라 정해져있다. 예를 들어 누산기(AC)의 보수를 취하라는 명령이 있다면 피연산자가 AC에 있으므로 implied 모드가 된다. 사실상 AC를 사용하는 명령어는 모두 implied이며 스택 구조 역시 피연산자가 항상 스택의 top이므로 implied이다.

 

(2) immediate 모드

- 피연산자가 명령어 그 자체에 있다. 즉 Address에 든 값을 피연산자로 쓰겠다는 말이다. 이 경우 주소 필드라기보다 피연산자 필드를 가지게된다. 피연산자 필드는 실제 피연산자를 가진다. 

 

(3) 레지스터 모드

- CPU 내의 레지스터에 피연산자가 있다. 레지스터 값을 피연산자로 쓰겠다는 말이다. k 비트의 필드는 2k개의 레지스터 중 하나를 선택할 수 있다.

 

(4) 레지스터 간접 모드

- 명령어가 피연산자의 주소를 가지고 있는 레지스터를 지정한다. 레지스터 값이 피연산자의 주소를 가지고 있다는 말이다. 레지스터는 피연산자의 주소를 가지고 있는 것이다. 이 모드는 직접 메모리의 주소를 지정하는 것보다 적은 비트가 든다.

 

(5) 자동증가 또는 자동감소 모드

- 레지스터 값이 메모리를 엑세스하고 난 직후 자동적으로 하나 증가하거나 감소한다. 이것을 빼면 레지스터 간접 모드와 같다. 메모리에 있는 데이터가 어떤 표라면 매번 엑세스할 때마다 하나씩 증가 혹은 감소 시켜야 한다. 이런 경우를 위해서 자동증가/감소가 있다. 

 

(6) 직접 주소 모드

- 명령어 주소 부분이 피연산자의 유효 주소이다. 명령어의 주소 부분이 그대로 유효 명령어의 주소 필드에 의해 직접적으로 주어진다. 분기 명령어에서는 실제 분기할 주소를 나타낸다.

 

(7) 간접 주소 모드

- 명령어의 주소 필드가 가리키는 주소에 피연산자의 유효 주소가 있다. 따라서 값을 가져오기 위해 두 번의 접근이 필요하다. 이 명령어를 수행할 때는 메모리로부터 명령어를 fetch하고 그것의 주소 부분으로부터 다시 유효 주소를 메모리에서 가져와야 한다. 

- 어떤 어드레싱 모드에서는 명령어에서의 주소 필드가 CPU의 특정 레지스터 값과 더해야 유효주소가 되는 경우도 있다. 예를 들어, 유효 주소 = 명령어에서의 주소 부분 + 레지스터 값

 

(8) 상대 주소 모드

- 프로그램 카운터(PC) + 명령어의 주소 부분으로 유효주소를 결정한다. 명령어의 주소 부분은 보통 기호를 포함한 수이며 이 숫자를 프로그램 카운터와 더하여 유효 주소를 만든다. 이런 방식은 명령어에서 분기해야 할 위치가 그 명령어 부근에 있을 때 주로 사용된다. 또는 메모리의 전체 주소를 지정하는 것보다 적은 비트가 들기 때문에 더욱 짧은 주소 필드를 가질 수 있다.

 

(9) 인덱스드 어드레싱 모드

- 인덱스 레지스터 + 명령어의 주소 부분으로 유효주소를 결정한다. 인덱스 레지스터는 인덱스 값(배열의 특정 요소로부터 상대적인 오프셋)을 갖는 특별한 레지스터이다. 명령어의 주소 부분은 메모리에서 배열의 시작 주소를 가리킨다. 배열의 각 피연산자는 시작하는 주소로부터 상대적인 위치(오프셋)에 저장되어 있다. 시작하는 주소와 피연산자의 주소 사이의 차이는 인덱스 레지스터가 지나고 있는 인덱스값이다.

 

 

(10) 베이스 레지스터 어드레싱 모드

- 베이스 레지스터 내용 + 명령어의 주소 부분으로 유효주소를 결정한다. 인덱스 레지스터는 명령어의 주소 부분에 대한 상대적인 위치를 가지고 있는데 반해, 베이스 레지스터는 베이스 주소를 가지고 있고, 명령어의 주소 부분은 이 베이스 주소로부터의 상대적인 displaysment가 된다. 프로그램이나 데이터가 메모리의 한 세그먼트로부터 다른 세그먼트로 옮겨질 때, 명령어의 주소를 이러한 위치의 변경을 반영해야 한다. 베이스 레지스터가 있다면 명령어의 displaysment는 변경될 필요가 없다. 다만 베이스 레지스터의 값이 다른 메모리 세그먼트의 시작 부분을 참고로해서 변경하면 된다.