1. 명령어 형식 (Instruction Format)
1) 명령어란?
CPU가 수행할 명령의 집합으로, 다음과 같은 정보를 포함하고 있어야 함.
- 연산 코드(Opcode): 수행할 연산 (예: ADD, LOAD)
- 오퍼랜드(Operand): 연산에 필요한 데이터 또는 데이터의 위치(주소)
- 다음 명령어 주소: (분기/호출 시에만 사용)
2) 명령어는 어떻게 구성될까?
- 명령어는 비트들로 이루어져 있으며, 연산 코드 필드, 오퍼랜드 필드 등으로 나뉨
- 명령어 형식이란, 이 필드들의 개수, 배치, 비트 수를 정의한 것!
- 보통 명령어의 길이는 CPU의 Word 크기와 같거나, 그 배수임.

- 연산 코드의 비트 수는 CPU가 수행할 수 있는 연산들의 수를 결정해줌.
- 위 예시에서는 연산 코드 필드의 길이가 4비트이므로, 16가지의 연산을 수행할 수 있음.
- 오퍼랜드 필드는 오퍼랜드 명령어 필드의 종류에 따라 필요한 비트 수가 달라질 수 있으며, 배정되는 비트들의 수에 따라 각각의 범위가 결정됨.
3) 명령어 필드의 종류에 따른 비트 수 결정
| 필드 | 유형 설명 |
| 데이터 | 표현 가능한 값의 크기 결정 |
| 기억장치 주소 | 접근 가능한 메모리 공간 결정 |
| 레지스터 번호 | 사용할 수 있는 레지스터 수 결정 |
- 명령어의 비트들을 연산의 종류와 수에 따라 필요한 만큼 연산 코드 필드에 배정
- 나머지 비트들은 오퍼랜드들을 위해 적절히 배정함.
4) 오퍼랜드 수에 따른 명령어 형식 분류
| 형식 | 예시 | 의미 |
| 1-주소 | ADD X | AC ← AC + M[X] |
| 2-주소 | ADD R1, R2 | R1 ← R1 + R2 |
| 레지스터 + 메모리 | ADD R1, X | R1 ← R1 + M[X] |
| 3-주소 | ADD R1, R2, R3 | R1 ← R2 + R3 |
- 1-주소 명령어:
- ADD X ; AC <- AC + M[X] , (X는 데이터가 저장되어 있는 기억장치 주소를 나타냄.)
- 기억장치 X번지의 내용과 AC의 내용을 더하고, 그 결과를 다시 AC에 저장 - 2-주소 명령어
- ADD R1, R2 ; R1 <- R1 + R2
- 레지스터 R1, 레지스터 R2에 적재되어 있는 데이터를 더하고, 결과값을 레지스터 R1에 저장 - 레지스터 + 메모리 명령어
- ADD R1, X ; R1 <- R1 + M[X]
- 그런데 위와 같은 명령어의 경우 명령어 코드 내에 레지스터 번호(R1)와 기억장치 주소(X)가 모두 포함되어야 하므로, 주소지정 할 수 있는 기억장치 영역이 상당히 제한됨
- 3-주소 명령어
- ADD R1, R2, R3 ; R1 <- R2 + R3
- 이 명령어는 세 개의 오퍼랜드들을 포함하지만, 각각은 레지스터이기 때문에 비트 수가 많이 소요되지는 않음.
이와 같이 명령어의 오퍼랜드의 수에 따라 여러가지 명령어 형식이 존재하는데, 이는 프로그램의 길이에 직접적인 영향을 미침.
5) 실전 예시: X = (A + B) * (C - D) 구현
- 사용할 니모닉스:
- ADD
- SUB
- MUL
- DIV
- MOV
- LOAD
- STOR
1) 1-주소 명령어 형식
| 니모닉스 | 동작 설명 |
| LOAD A | AC ← M[A] |
| ADD B | AC ← AC + M[B] |
| STOR T | M[T] ← AC |
| LOAD C | AC ← M[C] |
| SUB D | AC ← AC - M[D] |
| MUL T | AC ← AC * M[T] |
| STOR X | M[X] ← AC |
2) 2-주소 명령어 형식
| 니모닉스 | 동작 설명 |
| MOV R1, A | R1 ← M[A] |
| ADD R1, B | R1 ← R1 + M[B] |
| MOV R2, C | R2 ← M[C] |
| SUB R2, D | R2 ← R2 - M[D] |
| MUL R1, R2 | R1 ← R1 * R2 |
| STOR X, R1 | M[X] ← R1 |
3) 3-주소 명령어 형식
| 니모닉스 | 동작 설명 |
| ADD R1, A, B | R1 ← M[A] + M[B] |
| SUB R2, C, D | R2 ← M[C] - M[D] |
| MUL X, R1, R2 | M[X] ← R1 * R2 |
- 레지스터의 수와 기억장치 용량이 고정된 상태에서 이 명령어 형식을 사용하면 명령어의 비트 수가 늘어나됨
- 결과적으로 프로그램 길이는 줄어들지만 프로그램을 저장하기 위한 기억장치 용량은 별로 줄어들지 않으며, 명령어 해독 과정이 더 복잡하게 됨.
2. 주소지정 방식 (Addressing Mode)
주소지정 방식이란?
- 명령어에 있는 오퍼랜드를 통해 **데이터의 실제 위치(EA, Effective Address)**를 결정하는 방식
- 다양한 방식이 존재하며, CPU 구조나 성능에 큰 영향을 미침.
1) 직접 주소지정 방식 (Direct Addressing)

🔸 EA 계산
EA = A(A: 명령어 안에 포함된 주소)
🔸 설명
- 명령어 내 오퍼랜드가 직접 메모리 주소를 지정
- 해당 주소에서 데이터를 읽거나 씀
🔸 예시
LOAD A ; AC ← M[A]
🔸 장점
- 단순하고 빠름 (한 번의 메모리 접근으로 완료)
🔸 단점
- 주소 공간이 제한됨 (오퍼랜드 비트 수에 의해)
2. 간접 주소지정 방식 (Indirect Addressing)

🔸 EA 계산
EA = (A)
(A가 가리키는 메모리의 내용이 유효 주소)
🔸 설명
- 오퍼랜드는 메모리 주소를 가리키고
- 그 주소에 또 다른 주소가 저장되어 있음 → 거기서 데이터 읽음
🔸 예시
LOAD (A) ; AC ← M[M[A]]
🔸 장점
- 매우 넓은 주소 공간 사용 가능 (메모리의 전체 주소 범위 활용)
🔸 단점
- 메모리 접근이 2번 필요 → 느림
3. 즉시 주소지정 방식 (Immediate Addressing)

🔸 EA 없음 (데이터 직접 사용)
🔸 설명
- 명령어 내 오퍼랜드가 데이터 자체를 포함
- 데이터 인출 과정이 불필요
🔸 예시
MOV A, #5 ; A ← 5
🔸 장점
- 매우 빠름 (메모리 접근 없음)
- 명령어 실행 속도 향상
🔸 단점
- 표현 가능한 값이 제한됨 (오퍼랜드 비트 수에 따라)
4. 묵시적 주소지정 방식 (Implicit Addressing)
🔸 EA 없음 (레지스터 등 내부 자원 자동 사용)
🔸 설명
- 오퍼랜드가 명령어에 표시되지 않음
- 특정 **레지스터(예: AC)**가 암묵적으로 사용됨
🔸 예시
CLR ; AC ← 0 (누산기 초기화)
PUSH ; 스택에 AC 저장
🔸 장점
- 명령어 길이 짧고 단순함
🔸 단점
- 유연성 부족 (사용할 데이터 위치를 선택할 수 없음)
5. 레지스터 주소지정 방식 (Register Addressing)

🔸 EA = R
(R: 명령어에 포함된 레지스터 번호)
🔸 설명
- 데이터가 레지스터 안에 존재
- 메모리에 접근하지 않고 연산 수행
🔸 예시
ADD R1, R2 ; R1 ← R1 + R2
🔸 장점
- 매우 빠름 (레지스터는 접근 속도 빠름)
- 명령어 짧음 (레지스터 번호는 비트 수 적음)
🔸 단점
- 저장할 수 있는 데이터 수가 제한됨 (레지스터 수가 적음)
6. 레지스터 간접 주소지정 방식 (Register Indirect Addressing)

🔸 EA = (R)
(R: 주소를 저장한 레지스터)
🔸 설명
- 레지스터가 가리키는 메모리 주소에서 데이터를 읽음
- 즉, 레지스터는 간접 주소의 포인터 역할
🔸 예시
LOAD (R1) ; AC ← M[R1]
🔸 장점
- 레지스터의 속도와 메모리의 유연함을 동시에 활용 가능
🔸 단점
- EA 계산을 위해 레지스터 내용을 읽는 연산 필요
7. 변위 주소지정 방식 (Displacement Addressing)
🔸 EA = A + (R)
🔸 설명
- 오퍼랜드(A)와 **레지스터(R)**의 값을 더해서 주소를 계산
- EA는 R이 가리키는 레지스터의 내용을 A와 더함으로써 결정
- 레지스터가 베이스, 오퍼랜드가 오프셋 역할
🔸 예시
LOAD A(R1) ; AC ← M[A + R1]
변위 주소지정 방식의 세부 형태
| 방식 EA | 계산 | 특징 |
| 상대 주소지정 (PC-relative) | EA = A + (PC) | 분기 명령어에서 사용, 프로그램 흐름 제어 |
| 인덱스 주소지정 (Indexed) | EA = A + (IX) | 배열 접근, 루프 처리에 효과적 |
| 베이스 레지스터 (Base Register) | EA = A + (BR) | 프로그램 로딩 주소 기준, 메모리 위치 독립성 |
- 상대 주소지정 ( EA = A + (PC) )
- PC(Program Counter)가 묵시적으로 사용됨
- 주로 분기(branch) 명령어에서 사용
- 오퍼랜드(A)가 양수면 앞으로, 음수면 뒤로 분기 - 인덱스 주소지정( EA = A + (IX) )
- A: 배열의 시작 주소
- IX: 현재 접근하려는 데이터까지의 거리
- 루프에서 반복 접근 시 유리
- **자동 인덱싱(auto-indexing)**도 가능: IX ← IX + 1 자동 수행 - 베이스 레지스터( EA = A + (BR) )
- BR에는 프로그램이 시작되는 기준 주소 저장
- A는 그 기준에서의 상대적 오프셋
'ARCHITECTURE' 카테고리의 다른 글
| [아키텍처] 제어 유니트(Control Unit) 란? (0) | 2025.04.09 |
|---|---|
| [아키텍처] 명령어 세트(Instruction Set)과 인터럽트 사이클(Interrupt Cycle) (0) | 2025.04.09 |
| [아키텍처] 정수의 산술 연산과 부동소수점 수 (0) | 2025.03.26 |
| [아키텍처] 컴퓨터 산술과 논리 연산 (1) | 2025.03.19 |
| [아키텍처] CPU의 구조와 동작 원리 (0) | 2025.03.13 |