본문 바로가기

용어,개념

[펌] 주소 지정 방식



 

 



- 인스트럭션이란
CPU를 동작시키기 위한 명령을 지시하는 기계어로 이루어져 있는 명령어
명령부( op code )와 처리부( operand )로 나눠진다.

- 프로그램 저장 방식

우리가 프로그래밍을 하고 이것을 컴파일 시키면 하나의 프로그램이 완성된다. 이 프로그램은 수 많은 인스트럭션( 명령어 )들로 구성되어 있는데 이것들을 메모리에 기억시켜두고 차례대로 불러와서 실행하는 것이 프로그램 저장 방식의 개념이다.

- 어셈 블리어
기계어와 일대일 대응이 되는 컴퓨터 프로그래밍 저급언어이다.
기계어는 실제로 컴퓨터 CPU가 읽어서 실행할 수 있는 0과 1로 이루어진 명령어의 조합이다. 이러한 각 명령어에 대해 사람이 알아보기 쉬운 니모닉 기호(mnemonic symbol)를 정해 사람이 좀 더 쉽게 컴퓨터의 행동을 제어할 수 있도록 한 것이 어셈블리 언어이다.



명령어 형식


       명령 코드부            주소부 

      명령 코드부 : 동작지시
      주소부 : 처리해야 할 데이터가 어디에 있는지 표현한다.( 이하 오퍼랜드 필드 또는 주소필드 라고 하겠음 )


인스트럭션은 크게 명령부와 주소부로 나누어진다. 명령부는 더하라, 빼라, 곱해라 등등의 명령이라고 보면 되고 주소부는 피연산자( operand ) 라고 생각하면 된다. 즉 더하거나 뺄 값 들이라고 생각하면 되는데 그리 단순하지는 않고 여러 방식이 존재한다. 이것을 지금부터 알아보겠다.

컴퓨터 구조에서 인스트럭션 형태에 대해서 공부할떄 가장 먼저 공부해야 할 것이 바로 operand에 대한 주소 지정 방식이다.

주소지정방식이란 프로그램 수행 시 오퍼랜드를 지정하는 방식으로서 실제 오퍼랜드( 실제 우리가 연산에 사용할 값 )를  참조하기 전에 명령어의 주소 필드를 변경하거나 해석하는 규칙을 지정하는 형식



- 묵시적 주소 지정 방식

명령어에서 주소필드를 필요로 하지 않는 방식
연산코드필드에 지정된 묵시적 의미의 오퍼랜드를 지정
[예]
ADD   ;
기억장치스택에서 ADD와 같은 명령어는 스택의 맨 위 항목과 그 아래 항목을 더하여 스택의 맨 위에 저장하는 명령어(오퍼랜드가 스택의 맨 위에 있다는 것을 묵시적으로 가정)

- 즉치 주소 지정 방식
데이터가 명령어에 포함되어 있는 방식 : 오퍼랜드 필드의 내용이 연산에 사용할 실제 데이터
데이터를 인출하기 위하여 기억장치를 액세스 할 필요가 없음
상수값의 크기가 오퍼랜드 필드의 비트 수에 의하여 제한됨

- 레지스터 주소 지정방식
(1) 직접 주소 지정 방식
연산에 사용할 데이터가 레지스터에 저장되어 있는 방식
즉 명령어의 오퍼랜드 필드에는 레지스터를 가리키는 값이 들어가게 된다.
데이터를 인출하기 위하여 기억장치를 액세스 할 필요가 없음
주소 지정에 사용 될수 있는 레지스터들의 수는 오퍼랜드의 비트 수에 따라 결정되는데
레지스터 수가 많지 않으므로 오퍼랜드 필드의 비트 수가 적어도 된다.

(2) 간접 주소 지정 방식
레지스터 간접주소지정 방식은 레지스터가 실제 오퍼랜드가 저장된 기억장치의 주소값을 갖고있는 방식
주소 지정 할 수 있는 메모리 영역이 확장된다. ex) 레지스터의 크기가 16비트라면 주소지정 영역은 2의 16승 = 64k가 된다.


- 직접 주소 지정 과 간접 주소 지정 방식

(1) 직접주소지정방식(direct-addressing mode)
명령어의 오퍼랜드 필드에 직접 실제 오퍼랜드가 담겨 있는 메모리의 주소를 저장

(2) 간접주소지정방식(indirect-addressing mode)
명령어의 오퍼랜드 필드에 유효주소가 저장되어있는 기억장치 주소를 기억시키는 주소방식. 제어는 기억장치로부터 명령어를 가져온 후 주소부분을 이용하여 다시 기억장치에 접근하여 유효주소를 읽어 냄
 ex) c언어의 포인터를 생각하면 이해가 빠르다.

- 변위 주소 지정 방식
직접 주소 지정과 레지스터 간접 주소 지정 방식의 조합
유효 주소 = 변위주소 + ( R )
명령어에 포함된 변위 A값과 R이 가리키는 레지스터의 내용을 더하여 유효 주소를 결정
사용되는 레지스터에 따라 여러 종류의 변위 주소지정 방식 정의
프로그램 카운터(PC) => 상대 주소 지정 방식
인덱스 레지스터 => 인덱스 주소 지정 방식


(1) 상대 주소 지정 방식
유효주소를 계산하기 위해 처리장치 내에 있는 특정 레지스터의 내용에 명령어 주소필드 값을 더하는 방식
자주 사용되는 레지스터는 PC로서 상대주소지정방식에서 유효주소는 다음과 같이 계산됨

유효주소 = 명령어 주소부분의 내용 + PC의 내용

주로 분기 명령어에서 사용
전체 메모리 주소가 명령어에 포함되어야 하는 일반적인 분기 명령어보다 적은 수의 비트만 있으면 된다.
분기 범위가 오퍼랜드 필드의 길이에 의하여 제한된다.


(2) 인덱스된 주소 지정 방식

인덱스된 주소지정방식에서는 인덱스 레지스터의 내용을 명령어 주소 부분에 더해서 유효주소를 얻음
인덱스 레지스터는 특정한 CPU레지스터나 레지스터 파일에 있는 레지스터가 될 수 있음

유효주소 = 명령어 주소부분의 내용 + IX(인덱스 레지스터)

인덱스 레지스터(IX) : 인덱스 값을 저장하는 특수 레지스터
배열 데이터 액세스에서 많이 사용

(3) 자동 인덱싱
명령어가 실행될 때마다 인덱스 레지스터의 내용이 자동적으로 증가 혹은 감소
이 방식이 사용된 명령어가 실행되면 아래의 두 연산이 연속적으로 수행

- 자동 증가 주소지정 방식
레지스터 간접 주소 지정 방식과 유사하다. 자동증가 레지스터를 사용하며, 이 레지스터의 출력이 유효주소가 된다
자동증가는 메모리로 접근한 후, 자동증가 레지스터의 값이 자동으로 증가

- 자동 감소 주소지정 방식
자동증가 주소 지정 방식과 유사하지만 이 방식에서는 자동 감소 레지스터의 내용이 먼저 감소한다. 자동 감소 레지스터의 값이 메모리에 접근하기 위한 주소이다.
이 주소에서 읽어서 레지스터로 적재한다.