핵심 인사이트 (3줄 요약)

  1. 본질: 1-주소 명령어 (One-Address Instruction)는 명령어에 주소를 하나만 적고, 나머지 한 축은 누산기 (Accumulator, AC)로 암묵적으로 고정해 연산하는 형식이다.
  2. 가치: 주소 필드를 줄여 하드웨어와 명령어 길이를 단순화할 수 있지만, 모든 계산이 AC에 몰려 메모리 왕복과 직렬 의존성이 커진다.
  3. 판단 포인트: 이 구조는 "칩을 아주 단순하게 만들 것인가"에는 강하지만, "여러 값을 동시에 다룰 것인가"라는 현대 성능 요구에는 불리하다.

Ⅰ. 개요 및 필요성

1-주소 명령어는 명령어 포맷 안에 피연산자 주소를 하나만 넣고, 다른 피연산자와 결과 저장 위치를 AC로 약속하는 명령어 구조다. 예를 들어 ADD X는 보통 AC ← AC + M[X]처럼 해석된다. 여기서 M[X]는 메모리 X번지의 값이고, 연산 결과도 다시 AC에 남는다.

이 방식이 등장한 이유는 초기 컴퓨터에서 레지스터 자체가 비싸고 귀했기 때문이다. CPU (Central Processing Unit) 내부에 범용 레지스터를 여러 개 두기 어렵던 시기에는, "연산의 중심이 되는 한 자리"를 정해 두는 편이 제어장치 설계와 배선 비용 면에서 유리했다. 즉 1-주소 명령어는 성능을 위한 구조가 아니라, 제한된 하드웨어 자원으로 계산 기능을 구현하기 위한 절충의 결과였다.

이 구조가 없으면 초기 기계는 같은 덧셈을 위해 두 개 이상의 주소 필드와 더 복잡한 해독 회로를 가져야 한다. 반대로 1-주소 형식을 쓰면 명령어는 짧아지고 제어는 쉬워지지만, 모든 중간 결과를 AC 하나에 몰아넣어야 해서 프로그램 실행 흐름이 쉽게 막힌다. 그래서 1-주소 명령어는 "단순성의 이득"과 "병목의 대가"를 동시에 보여주는 교육용 핵심 사례다.

┌──────────────────────────────────────────────────────────────┐
│        1-주소 명령어의 기본 약속: 주소 1개 + AC 암묵 사용     │
├──────────────────────────────────────────────────────────────┤
│ 명령어: ADD X                                                │
│                                                              │
│ 해석 1: X가 가리키는 메모리 값을 읽는다                      │
│ 해석 2: ALU (Arithmetic Logic Unit)가 AC와 더한다            │
│ 해석 3: 결과를 다시 AC에 저장한다                            │
│                                                              │
│ 최종 의미: AC ← AC + M[X]                                    │
└──────────────────────────────────────────────────────────────┘

이 그림의 핵심은 명령어 안에 주소가 하나만 있어도 실제로는 "읽기 대상"과 "연산 중심"이 둘 다 존재한다는 점이다. 다만 둘 중 하나를 명시하지 않고 AC로 고정함으로써 명령어 길이를 줄인 것이다.

  • 📢 섹션 요약 비유: 1-주소 명령어는 계산대가 하나뿐인 작은 가게와 같다. 손님 물건은 여러 개여도 최종 계산은 항상 그 한 계산대에서만 처리하므로, 구조는 단순하지만 줄이 길어지기 쉽다.

Ⅱ. 아키텍처 및 핵심 원리

1-주소 구조의 핵심은 "명시적 주소는 하나, 실제 연산 축은 둘"이라는 비대칭성이다. 명령어는 짧아지지만, 그 대가로 AC가 입력 버퍼이자 중간 결과 저장소이자 출력 위치를 모두 맡는다. 따라서 1-주소 기계는 명령어 형식보다 AC 운용 전략이 더 중요하다.

동작 구성 요소

요소역할핵심 설계 의미
연산코드 (Opcode)덧셈, 뺄셈, 적재 같은 동작 지정AC를 어떻게 바꿀지 결정
주소 필드 (Address Field)외부 피연산자 위치 지정메모리나 지정된 저장 위치 참조
누산기 (Accumulator, AC)암묵적 피연산자이자 결과 저장소모든 연산 흐름의 중심축
산술논리장치 (Arithmetic Logic Unit, ALU)실제 계산 수행AC와 외부 데이터 결합
메모리 (Memory)값 보관AC가 부족한 중간 결과를 임시 저장

예를 들어 Y = (A + B) × C를 계산하려면 보통 아래와 같은 흐름이 필요하다.

┌──────────────────────────────────────────────────────────────┐
│     1-주소 명령어로 식 계산하기: AC가 비워지고 채워지는 순서  │
├──────────────────────────────────────────────────────────────┤
│ 1. LOAD A    → AC ← M[A]                                     │
│ 2. ADD  B    → AC ← AC + M[B]                                │
│ 3. MUL  C    → AC ← AC × M[C]                                │
│ 4. STORE Y   → M[Y] ← AC                                     │
│                                                              │
│ 특징: 중간 결과는 늘 AC에만 머문다                           │
└──────────────────────────────────────────────────────────────┘

겉보기에는 단순하지만, 식이 조금만 복잡해져도 문제가 커진다. 예를 들어 Y = (A + B) × (C + D)라면 왼쪽 부분식을 계산한 뒤 AC를 비우기 전에 메모리에 저장해야 한다. 즉 AC가 하나뿐이라 동시 보관이 불가능하고, 중간값을 자주 STORE했다가 다시 LOAD해야 한다.

핵심 병목

  1. 메모리 왕복 증가: AC 하나로는 여러 중간값을 동시에 들고 있을 수 없다.
  2. 직렬 의존성 증가: 다음 명령어는 이전 명령어가 AC를 비워 줄 때까지 기다려야 한다.
  3. 명령어 수 증가 가능성: 주소 필드는 짧지만 LOAD/STORE 보조 명령이 늘어난다.

즉 1-주소 명령어는 명령어 포맷 차원에서는 단순화지만, 프로그램 실행 차원에서는 AC 중심의 교통정리가 필수인 구조다.

  • 📢 섹션 요약 비유: 냄비 하나로 여러 요리를 만들면 조리도구는 적게 들지만, 찌개를 끓였다가 비우고 볶음을 하느라 계속 옮겨 담아야 한다. 1-주소 명령어의 AC도 바로 그런 "만능이지만 하나뿐인 냄비"다.

Ⅲ. 비교 및 연결

1-주소 명령어를 제대로 이해하려면 0-주소, 2-주소, 3-주소 구조와 비교해야 한다. 주소 수는 단순한 문법 차이가 아니라, 어디에 상태를 쌓고 어디서 병목이 생기는지를 결정하는 설계 선택이기 때문이다.

구분중심 저장 방식대표 형태장점한계
0-주소 명령어스택 (Stack)PUSH A, ADD명령어가 매우 짧음스택 조작 부담 큼
1-주소 명령어누산기 (AC)ADD X하드웨어 단순, 포맷 간결AC 병목, 메모리 왕복 증가
2-주소 명령어레지스터 두 개ADD R1, R2유연성과 단순성의 절충목적지 덮어쓰기 제약
3-주소 명령어레지스터 세 개ADD R1, R2, R3병렬성·표현력 우수인코딩과 하드웨어가 복잡

1-주소 구조는 스택 머신보다 중간 상태를 조금 더 직접 제어할 수 있지만, 다중 레지스터 기반 구조보다 병렬 실행성이 크게 떨어진다. 현대 프로세서가 범용 레지스터 (General Purpose Register, GPR)를 많이 두는 이유는 여러 데이터를 동시에 잡아 두고 명령어 간 독립성을 높이기 위해서다. 반면 1-주소 명령어는 모든 흐름이 AC에 모이므로, 명령어 수준 병렬성 (Instruction Level Parallelism, ILP)을 끌어내기 어렵다.

또한 1-주소 명령어는 ISA (Instruction Set Architecture) 설계에서 "코드 밀도"와 "실행 유연성"의 교환관계를 보여준다. 주소가 적으면 비트 수를 아낄 수 있지만, 숨겨진 상태가 많아져 컴파일러와 프로그래머가 더 많은 순서를 신경 써야 한다. 이 때문에 현대 범용 CPU에서는 중심 구조로 밀려났지만, 제어 명령이나 단항 연산처럼 원래 피연산자가 하나뿐인 명령에서는 그 정신이 여전히 남아 있다.

┌──────────────────────────────────────────────────────────────┐
│      주소 수가 늘수록 바뀌는 것: 단순성에서 병렬성으로 이동    │
├──────────────────────────────────────────────────────────────┤
│ 0-주소  →  스택 꼭대기 사용       → 코드 짧음, 순서 의존 큼     │
│ 1-주소  →  AC 고정 사용           → 구조 단순, AC 병목 큼       │
│ 2-주소  →  두 레지스터 활용       → 절충형                     │
│ 3-주소  →  입력/출력 분리 가능     → 표현력·병렬성 우수         │
└──────────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: 1-주소 명령어는 책상 하나로 공부하는 학생과 같다. 공간은 적게 쓰지만 책, 노트, 문제집을 동시에 펴 놓기 어렵다. 반대로 큰 책상은 비싸지만 여러 작업을 한꺼번에 펼쳐 둘 수 있다.

Ⅳ. 실무 적용 및 기술사 판단

실무에서 1-주소 명령어를 볼 일은 현대 데스크톱 CPU보다는 교육용 아키텍처, 레거시 마이크로컨트롤러, 그리고 명령어 형식 분석 문제에서 더 많다. 따라서 판단의 초점은 "이 구조를 지금 채택할 것인가"보다 "왜 이런 구조가 존재했고 어디까지 유효한가"에 맞춰야 한다.

언제 유리한가

  • 하드웨어 면적과 제어 복잡도를 극단적으로 줄여야 할 때: 레지스터 파일과 다중 포트 설계를 줄일 수 있다.
  • 명령어 해독기를 단순하게 만들고 싶을 때: 주소 해석 규칙이 작고 명확하다.
  • 교육용·개념 설명용 모델이 필요할 때: 명령 실행 흐름을 AC 중심으로 쉽게 설명할 수 있다.

언제 불리한가

  • 복잡한 수식과 반복 계산이 많은 경우: 중간 결과 저장 때문에 메모리 접근이 급증한다.
  • 파이프라인과 병렬 실행을 노리는 경우: 모든 연산이 AC를 공유해 데이터 의존성이 심해진다.
  • 컴파일러 최적화가 중요한 경우: 값 배치 자유도가 낮아 최적화 여지가 작다.

기술사 답안 포인트

  1. 1-주소 명령어의 장점은 "주소 수 감소" 자체가 아니라, 그 결과로 얻는 하드웨어 단순화에 있다.
  2. 단점은 "레지스터가 적다"가 아니라, AC 하나에 모든 상태가 집중되어 메모리 트래픽과 직렬 의존성이 증가한다는 데 있다.
  3. 현대 구조와 연결할 때는 "완전 소멸"이 아니라, 단항 연산·분기 명령의 압축된 형식으로 개념이 부분 계승된다고 정리하는 것이 좋다.

즉 답안을 쓸 때는 "옛날 방식"이라고만 정리하면 부족하다. 왜 당시에는 합리적이었고, 왜 지금은 중심 구조에서 밀려났는지를 자원 비용·병렬성·메모리 접근 관점으로 함께 설명해야 한다.

  • 📢 섹션 요약 비유: 1-주소 명령어는 접이식 의자와 같다. 보관과 제작은 편하지만, 회의 참가자가 많아지면 결국 큰 테이블과 여러 의자가 필요해진다. 쓰임새는 분명하지만 만능은 아니다.

Ⅴ. 기대효과 및 결론

1-주소 명령어의 가장 큰 교육적 가치는 "명령어 형식이 바뀌면 프로그램 짜는 방식 자체가 바뀐다"는 사실을 선명하게 보여 준다는 점이다. 주소 필드를 하나 줄이는 선택이 곧 AC 중심 실행 모델, 메모리 임시 저장 증가, 병렬성 제한으로 이어진다. 즉 이 개념은 단순한 포맷 암기가 아니라, ISA가 성능과 구현 비용을 어떻게 함께 바꾸는지를 이해하는 관문이다.

실제 설계 측면에서는 레지스터 수를 줄여 회로를 단순화하고 명령어 비트를 절약하는 효과가 있다. 그러나 현대 고성능 시스템에서는 이 이점보다 AC 병목, 낮은 표현력, 빈번한 메모리 접근 비용이 더 크게 작용한다. 그래서 1-주소 명령어는 주류 아키텍처의 중심에서는 물러났지만, 압축된 명령 형식과 단항 연산 설계 철학 속에서 흔적을 남긴다.

따라서 이 개념은 "낡은 기술"이 아니라, 컴퓨터 구조가 단순성에서 유연성으로 이동해 온 과정을 보여 주는 이정표로 기억하는 것이 맞다. 주소를 줄이면 포맷은 가벼워지지만, 실행 모델은 더 무거워질 수 있다는 점이 1-주소 명령어의 핵심 교훈이다.

  • 📢 섹션 요약 비유: 짐을 줄이려고 가방 하나만 들고 떠나면 출발은 가볍다. 하지만 여행 중 필요한 물건을 꺼내고 다시 넣는 일이 반복되면 오히려 더 불편해질 수 있다. 1-주소 명령어도 바로 그런 단순함의 양면성을 보여 준다.

📌 관련 개념 맵

개념연결 포인트
누산기 (Accumulator, AC)1-주소 명령어의 암묵적 피연산자이자 결과 저장 위치
0-주소 명령어 (Zero-Address Instruction)스택 기반 실행 모델과 비교해 주소 수의 의미를 드러냄
2-주소 명령어 (Two-Address Instruction)1-주소와 3-주소 사이의 절충형 구조
범용 레지스터 (General Purpose Register, GPR)현대 CPU가 AC 병목을 넘기 위해 확장한 저장 구조
명령어 수준 병렬성 (Instruction Level Parallelism, ILP)1-주소 구조가 왜 현대 성능 최적화에 불리한지 설명해 주는 개념
코드 밀도 (Code Density)주소 수 감소가 가져오는 인코딩 효율 측면의 장점

📈 관련 키워드 및 발전 흐름도

초기 하드웨어 자원 제약
    │
    ▼
누산기 중심 기계 (Accumulator Machine)
    │
    ▼
1-주소 명령어 (One-Address Instruction)
    │
    ├─▶ 장점: 짧은 포맷 · 단순한 제어
    │
    └─▶ 한계: AC 병목 · 메모리 왕복 증가
            │
            ▼
다중 레지스터 기반 2/3-주소 구조 확산
            │
            ▼
현대 ISA의 단항 연산 · 분기 명령 형식으로 부분 계승

이 흐름은 1-주소 명령어가 단순히 사라진 개념이 아니라, 하드웨어 제약에서 출발해 현대 명령어 설계의 일부로 변형 계승된 역사적 단계임을 보여 준다.

👶 어린이를 위한 3줄 비유 설명

  1. 1-주소 명령어는 컴퓨터가 계산할 때 책상을 하나만 쓰는 방법이에요.
  2. 그래서 어디에 놓고 계산할지는 아주 단순하지만, 여러 문제를 한꺼번에 풀기는 어려워요.
  3. 작은 방에서는 편하지만 큰 교실에서는 더 넓은 책상과 여러 자리가 필요해지는 것과 같아요.