명령어 주소 결정 방식과 유효 주소 계산

명령어 주소 결정 방식의 직접·간접·묵시적·즉시적 방식과 상대·베이스·인덱스 주소 계산을 정리한다.

2026-08-14 · 최초 발행 2025-12-25

주소 필드를 실제 오퍼랜드 위치로 바꾸는 규칙

주소 지정 방식(Addressing Mode)은 명령어의 주소 필드(Operand)를 해석해 실제 오퍼랜드가 있는 위치를 찾는 방법이다. 제한된 비트 수의 주소 필드만으로도 여러 주소 범위를 표현해야 하므로, 명령어는 주소를 그대로 쓰기도 하고 메모리나 레지스터 값을 더해 유효 주소를 계산하기도 한다.

여기서 약식 주소는 계산 전 명령어에 담긴 주소 필드이고, 유효 주소는 실제 오퍼랜드가 위치한 최종 메모리 주소다.

명령어주소 필드주소 지정방식직접간접묵시적즉시적계산 방식유효 주소약식 주소 + 레지스터레지스터 데이터명령어 데이터

주소 필드의 해석만으로 접근하는 방식

직접 모드 (Direct Mode)

직접 모드는 주소 필드에 실제 데이터가 있는 메모리 주소를 넣는다. 유효 주소는 EA = AD로 결정된다. 구조가 단순하고 메모리 접근은 1회면 되지만, 표현 가능한 주소 범위는 주소 필드 비트 수에 묶인다. n비트 주소 필드는 2^n 주소를 표현할 수 있다.

LOAD 100은 메모리[100] 값을 로드하는 명령이다.

명령어LOAD 100주소 필드100메모리[100]데이터: 42AC 42

간접 모드 (Indirect Mode)

간접 모드의 주소 필드는 데이터가 아니라, 실제 데이터 주소를 저장한 메모리 위치를 가리킨다. 유효 주소는 EA = M[AD]다. 포인터처럼 주소를 한 단계 거쳐 참조하므로 주소 범위를 확장하고 동적 주소 지정을 할 수 있다. 대신 메모리 접근은 최소 2회 이상 필요하다.

LOAD @200은 메모리[200]에 저장된 주소가 가리키는 값을 로드한다.

"AC""메모리[5000]데이터: 99""메모리[200]주소: 5000""명령어LOAD @200""AC""메모리[5000]데이터: 99""메모리[200]주소: 5000""명령어LOAD @200""(1) 첫 번째 메모리 접근""(2) 실제 주소 5000으로""(3) AC ← 99"

다중 간접 주소 지정에서는 메모리[200] → 메모리[5000] → 메모리[8000] → 데이터처럼 참조가 이어진다.

묵시적 모드 (Implied Mode)

묵시적 모드는 오퍼랜드 위치가 명령어 의미에 이미 정해져 있어 주소 필드가 필요 없다. 누산기(AC), 스택 포인터(SP), 프로그램 카운터(PC)가 대표 대상이다. 명령어 길이가 짧고 디코딩이 빠르며, 단일 레지스터 연산과 스택 연산에 사용된다.

  • CLA (Clear Accumulator): AC ← 0
  • PUSH: M[SP] ← AC, SP ← SP - 1
  • POP: SP ← SP + 1, AC ← M[SP]

즉시적 모드 (Immediate Mode)

즉시적 모드는 주소 필드 값 자체를 오퍼랜드로 사용한다. 별도 메모리 접근 없이 상수를 명령어 안에서 바로 읽으므로 가장 빠르다. 다만 담을 수 있는 데이터 크기는 주소 필드의 비트 수로 제한된다.

LOAD #50은 상수 50을 직접 로드해 AC ← 50을 수행한다. 상수 초기화와 루프 카운터 설정에 적합하다.

불필요명령어ADD #10주소 필드10 (데이터)AC AC + 10메모리 접근

레지스터를 더해 유효 주소를 계산하는 방식

상대 모드 (Relative Mode)

상대 모드는 명령어 주소 필드와 프로그램 카운터(PC)를 더해 유효 주소를 구한다. 식은 EA = AD + PC다. 위치 독립 코드를 구성할 수 있어 조건 분기와 루프에 유용하다.

BRZ +10에서 PC가 100이면 분기 주소는 110이 된다.

명령어JUMP +5주소 필드+5PC현재 위치: 200유효 주소200 + 5 = 205PC 205

베이스 레지스터 모드 (Base Register Mode)

베이스 레지스터 모드는 주소 필드와 베이스 레지스터 값을 합산한다. EA = AD + BR로 계산하며, 프로그램 재배치(Relocation), 세그먼트 주소 지정, 대용량 메모리 접근에 사용된다.

LOAD 100(BR)에서 BR=3000이면 유효 주소는 3100이다.

프로그램 베이스 레지스터 주소 필드 유효 주소
프로그램 A 0 100 100
프로그램 B 5000 100 5100
프로그램 C 10000 100 10100

인덱스 레지스터 모드 (Index Register Mode)

인덱스 레지스터 모드는 주소 필드와 인덱스 레지스터 값을 더한다. 유효 주소는 EA = AD + IX로 계산한다. 배열, 테이블, 문자열처럼 반복적으로 위치가 달라지는 데이터를 처리할 때 적합하다.

LOAD Array(IX)에서 Array=1000, IX=5이면 유효 주소는 1005다.

배열 시작주소: 1000인덱스IX=3유효 주소1000+3=1003배열[3] 접근

배열을 순회할 때는 인덱스를 갱신하면서 같은 기준 주소를 사용한다.

Loop: LOAD Array(IX)    ; Array[IX] 로드
      PROCESS           ; 처리
      IX ← IX + 1       ; 인덱스 증가
      BRZ Loop          ; 반복

접근 비용과 주소 범위의 차이

주소 지정 방식 유효 주소 메모리 접근 주소 범위 주요 용도
직접 AD 1회 제한적 (n비트) 일반 변수
간접 M[AD] 2회 이상 전체 메모리 포인터, 동적 주소
묵시적 고정 레지스터 0회 N/A 누산기, 스택
즉시적 AD 자체 0회 N/A 상수
상대 AD + PC 1회 PC 기준 범위 분기, 위치 독립 코드
베이스 AD + BR 1회 전체 메모리 재배치, 세그먼트
인덱스 AD + IX 1회 전체 메모리 배열, 반복문

즉시적 방식은 메모리 접근이 필요 없고, 묵시적 방식도 고정된 레지스터를 사용한다. 직접 방식은 단순한 접근에 맞고, 계산 방식은 레지스터를 활용해 표현 범위를 넓힌다. 간접 방식은 유연하지만 추가 메모리 접근이 따른다.

명령어 집합에서 함께 보는 조건

주소 지정 방식을 설계할 때는 주소 필드 비트 수를 줄여 명령어를 짧게 유지하면서도, 필요한 경우 전체 메모리 공간에 접근할 수 있어야 한다. 추가 계산이나 메모리 접근은 필요한 경우에만 사용해야 한다.

프로그래머 관점에서는 데이터 구조별로 적합한 방식을 제공하는지, 명령어마다 주소 지정 규칙이 일관적인지도 중요하다. 다양한 데이터 구조를 다루려면 직관성과 다양성이 함께 필요하다.

논리 주소와 물리 주소의 분리도 주소 결정과 연결된다. 프로그램이 사용하는 논리 주소는 MMU(Memory Management Unit)를 거쳐 실제 메모리 위치인 물리 주소로 변환된다. 이 구조는 프로그램 재배치와 가상 메모리를 지원한다.

주소 지정 방식유효 주소컴퓨터구조명령어레지스터