어드레싱 모드(Addressing Modes)


  • 명령어에서 주소필드에 있는 값을 해석하거나 수정하기 위한 규칙을 지정하고 있다.

    수정한다라는 것은 예를 들어 간접주소 방식에서 직접주소 방식이 아닌 간접주소이기 때문에 어드레싱 필드에 저장된 값이 유효한 주소가 아니고 수정해야 된다고 생각하면 된다.

  • 피연산자가 실제로 참조되기 전 내용

어드레싱 모드의 다양성

  • 사용자에게 더 자유롭게 프로그래밍 할 수 있도록 프로그래밍 유연성을 제공한다.
  • 명령어 필드에서 비트를 더 효율적으로 사용할 수 있다.

암시적인(묵시적) 모드 (Implied Mode)

  • 피연산자의 주소를 묵시적으로 지정하는데 명령어의 정의에 의해서 지정된다.

    • 명령어에서 주소를 지정할 필요가 없는 형태
    • 왜냐하면 유효한 주소가 EA=AC를 지정하고 있다.
    • 만약 스택구조를 사용하면 가장 위에 위치한 것이 유효주소가 되는형태
    • 기본 컴퓨터 예) CLA, CME, INP
    • CLA : AC에 저장된 값을 clear한다.
    • CME : E 플립플롭에 저장된 것을 보수를 취한다.
    • INP : 입력받은 값을 확인하고 플래그의 값을 0으로 변경한다.

즉시 모드 (Immediate Mode)

  • 피연산자의 주소를 지시하는 것 대신, 그 스스로가 피연산자가 되는 모드
    • 명령어에서 주소를 지정할 필요가 없다.
    • 피연산자 자체가 지정되어 있는 형태
    • 때때로, 주소보다 많은 비트를 필요로 한다.
    • 피연산자를 빠르게 획득할 수 있다.

레지스터 모드(Register Mode)

  • 명령어가 지정하고 있는 주소가 레지스터를 가리키고 있는 경우를 말한다.
    • 피연산자가 레지스터에 저장되어 있는 형태
    • 메모리가 저장할 수 있는 워드의 개수보다 레지스터가 더 적다. 따라서 메모리 주소보다 더 짧은 주소로 메모리 대신 레지스터를 지정할 수 있다. 그 수는 k bit = 2^k register개 표현이 가능하다.
    • 명령어에 주소필드가 저장되어야 한다.
    • 메모리 주소에서 피연산자를 획득하는거보다 빠르게 얻을 수 있다. 그 이유는 메모리의 특정한 주소값을 표현하는데 과정이 필요하기 때문. 메모리보다 데이터를 더 빨리 가지고가서 사용할 수 있다.
    • EA=IR(R) (IR(R)): 명령어 레지스터에 저장된 레지스터 필드가 유효주소다)

레지스터 간접 모드 (Register Indirect Mode)

  • 레지스터가 간접주소를 저장하고 있는 형태
  • 명령어가 레지스터를 지정하는 형태인데, 문제는 레지스터가 포함하고 있는 내용이 피연산자의 메모리 주소라는 것이다. 즉, 직접적으로 피연산자를 저장하고 있는 것이 아니라 피연산자가 저장된 메모리 위치를 가지고 있다.
    • 일반적으로 메모리 주소를 가리키는 것 보다는 더 짧은 비트로 레지스터 주소를 표현한다.
    • 명령어의 비트를 아낄 수 있다.
    • 레지스터 모드 또는 메모리 어드레싱 모드 즉, 메모리의 특정한 주소 값을 직접적으로 지정하는 것보다는 당연히 피연산자를 얻는 과정이 조금 느릴 수 있다.
    • EA=[IR(R)] ([x]:Content of x) : X의 내용이 유효주소를 가리키고 있다.

자동 증가 or 자동 감소 모드

  • 레지스터의 주소가 메모리를 접근하는데 사용됬을 때 그 때 레지스터의 값이 증가하거나 감소하는 형태

직접 주소 모드 (Direct Address Mode)

  • 명령어가 메모리 주소를 가리키는데 이 메모리 주소는 메모리의 피연산자에 직접 접근하는데 사용된다.,
    • 메모리 접근 모드중에 가장 빠르다.
    • 메모리 공간이 매우 큰 형태라면 메모리 주소로 지정하기 위해 사용되는 비트가 너무 많아질 수 있다.
    • 유효 주소 표현 : EA = IR(Address) (IR(Address) : address field of IR)

간접 주소 모드 (Indirect Addressing Mode)

  • 명령어의 주소필드가 메모리 위치에 해당하는 주소를 지정하고 있는데 이 메모리 위치는 피연산자의 주소를 포함하고 있는 메모리 주소를 가지고 있다.
    • 이 간접 주소 모드는 매우 큰 형태의 물리적인 메모리에서 지정할 떄 사용할 수 있다. 이때 더 유용하다. 그래서 축약된 주소를 가지고 상대적으로 더 작은 수의 비트를 사용해서 더 큰 물리적인 메모리의 주소를 표현하는데 사용될 수 있다.
    • 물론 추가적으로 메모리에 접근해야한다. 그래서 피연산자를 얻는데 느릴 수 있다.
    • EA = M[IR(Address)]

상대 주소 모드 (Relative Addreessing Modes)

  • 명령어에서 주소필드가 어떤 주소의 일부분을 가리키는 형태로 동작하는 모드
  • 여기서 주소의 일부는 피연산자의 주소를 계산하기 위해서 지정된 레지스터와 함께 사용되는 주소의 일부이다. 예를 들면 이 주소의 일부분이 어떤 레지스터 PC에 저장된 값과 더해져서 실제 유효주소를 가리키는 형태로 동작할 수 있다.
    • 명령어의 주소필드가 짧다.
    • 작은 수의 주소 비트를 가지고 큰 물리적인 메모리에 접근할 수 있다.
    • 유효 주소 표현 : EA = f(IR(address), R), R은 가끔은 묵시적으로 포함될 수 있다.
  • 레지스터에 따라서 3가지 형태로 구분된다.
    • PC 상대 주소 모드 (R = PC)
      • EA = PC+IR(Address)
    • 인덱시드 어드레싱 모드 (R=IX, IX:index register)
      • EA = IX+IR(Address)
      • ex) 배열
    • 베이스 레지스터 어드레싱 모드 (R = BAR, where BAR : Base Address Register)
      • EA = BAR + IR(Address)
      • ex) 서브 프로그램, 멀티 프로그래밍 시스템

예제

a

  • PC : 다음으로 실행할 명령어의 위치 값
  • R1 : 우리가 사용하는 레지스터
  • XR : 간접 주소 모드에서 사용되는 인덱스 레지스터의 값 (상대주소 모드)
  1. 처음에 시작되는 위치는 200이다. Load to AC와 Mode. 실제로 이 두개의 주소에 저장되고 있는게 하나의 명령어다.
  2. AC로 어떤 값을 로드한다. 이때 모드에 저장되어있는 형태에 따라서 달라진다. 주소 값은 500이다. 주소 500은 직접 주소 모드이다. AC로 로드되는 값은 메모리 500에 위치한 800이 AC에 들어간다.

AC=800

  1. 만약에 모드가 immediate operand이면 즉시 모드는 유효주소가 필요없다. 실제로 500에 해당하는 값이 주소 값이 아니라 실제에 해당하는 값 피연산자 이다. AC는 명령어에 저장되어있는 값 500이 전달된다.
  2. 간접 모드 - 500이라는 값이 전달 되었을 때 유효주소가 아니라 800이 유효주소이다 800에 저장되어 있는 값이 300에 저장된다.
  3. 상대주소 모드 : 직접 주소 모드랑 같다 address에 해당하는 값을 더해서 실제 유효주소를 가져온다. AC = 202+500 = 702에 해당하는 325라는 값이 AC에 저장된다
  4. 인덱스 모드 : 600에 해당하는 값이 유효주소이다. 현재 명령어에 있는 값은 500이고 XR의 값은 100이다 100+500은 600이 유효주소이고 600 주소에 있는 값 900이 AC에 들어간다.
  5. 레지스터 모드 : R1에 저장된 값이 AC로 전달된다.
  6. 레지스터 간접 모드 : 400에 해당하는게 유효주소가 되서 거기에 해당하는 700에 해당하는 값이 AC에 저장된다.
  7. 자동 증가/감소 모드 : 레지스터 간접 모드와 같은 방식으로 동작한다. 400에 해당하는 값이 유효주소로 되고 700을 가져온다. 감소 모드는 1을 뺸 399에 저장된 450을 가져온다.