CPU 기본 명령의 마이크로 연산 실행 흐름
AND, ADD, LDA, STA와 분기 명령을 중심으로 Execute Cycle의 마이크로 연산과 레지스터·메모리 흐름을 정리한다.
2026-08-14 · 최초 발행 2025-12-25
Execute Cycle에서 이어지는 레지스터와 메모리의 흐름
AND, ADD, LDA, STA, BUN, BSA, ISZ는 기본 CPU 명령어의 실행 과정을 보여준다. Fetch Cycle에서 읽어 온 명령어가 MBR에 들어 있는 상태에서, Execute Cycle은 주소를 정하고 메모리에 접근한 뒤 연산이나 저장을 수행한다.
3사이클 마이크로 연산 명령은 Execute Cycle에서 정확히 3개의 마이크로 연산으로 실행되는 기본 명령어 집합이다. 실행 조건은 F=1, R=0이며, 논리 연산·산술 연산·데이터 전송·제어 전송 명령이 이 흐름에 포함된다.
AND는 메모리 값과 AC를 논리곱한다
AND 명령은 누산기(Accumulator)와 메모리의 내용을 논리곱하고, 결과를 누산기에 저장한다.
AC ← AC ∧ M[AD]
| 사이클 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← MBR[AD] | 명령어의 주소 필드를 MAR에 전송 |
| T1 | MBR ← M[MAR] | 메모리에서 오퍼랜드 읽기 |
| T2 | AC ← AC ∧ MBR | AC와 MBR을 AND 연산하여 AC에 저장 |
AC = 1101 ∧ 1010 = 1000이 된다.
ADD는 덧셈 결과를 누산기에 남긴다
ADD 명령은 AC와 메모리 오퍼랜드를 더한 값을 AC에 저장한다.
AC ← AC + M[AD]
| 사이클 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← MBR[AD] | 명령어의 주소 필드를 MAR에 전송 |
| T1 | MBR ← M[MAR] | 메모리에서 오퍼랜드 읽기 |
| T2 | AC ← AC + MBR | AC와 MBR을 덧셈하여 AC에 저장 |
덧셈 결과는 Carry, Zero, Sign, Overflow 플래그에 영향을 준다. 자리올림이 발생하면 Carry가 설정되고, 결과가 0이면 Zero, 음수이면 Sign, 부호 있는 오버플로우가 발생하면 Overflow가 설정된다.
LDA와 STA로 데이터가 오간다
LDA는 메모리 내용을 누산기로 가져오는 명령이다.
AC ← M[AD]
| 사이클 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← MBR[AD] | 명령어의 주소 필드를 MAR에 전송 |
| T1 | MBR ← M[MAR] | 메모리에서 데이터 읽기 |
| T2 | AC ← 0, AC ← AC + MBR | AC 초기화 후 MBR 값 로드 |
T2에서는 AC를 0으로 초기화한 뒤 MBR 값을 더하는 방식으로 로드하며, 이는 하드웨어 재사용을 위한 구현이다.
STA는 AC의 값을 메모리에 기록한다.
M[AD] ← AC
| 사이클 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← MBR[AD] | 명령어의 주소 필드를 MAR에 전송 |
| T1 | MBR ← AC | 누산기 값을 MBR에 전송 |
| T2 | M[MAR] ← MBR | MBR 값을 메모리에 저장 |
BUN, BSA, ISZ가 프로그램 흐름을 바꾼다
BUN은 PC에 특정 주소를 전달하는 무조건 분기 명령이다.
PC ← MBR[AD]
| 사이클 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | PC ← MBR[AD] | 명령어의 주소를 PC에 직접 전송 |
메모리 접근이 필요하지 않아 1사이클만 필요하다.
BSA는 복귀 주소를 저장하고 서브루틴으로 제어를 넘긴다.
M[AD] ← PC
PC ← AD + 1
| 사이클 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← MBR[AD] | 서브루틴 시작 주소를 MAR에 |
| T1 | MBR ← PC | 복귀 주소(PC)를 MBR에 저장 |
| T2 | PC ← MBR[AD] | PC에 서브루틴 주소 설정 |
| T3 | M[MAR] ← MBR | 복귀 주소를 메모리에 저장 |
| T4 | PC ← PC + 1 | PC를 서브루틴 첫 명령으로 |
ISZ는 메모리 값을 1 증가시킨 뒤, 그 값이 0이면 현재 명령을 SKIP한다. 루프 카운터 구현에 사용된다.
M[AD] ← M[AD] + 1
IF M[AD] = 0 THEN PC ← PC + 1
| 사이클 | 마이크로 연산 | 설명 |
|---|---|---|
| T0 | MAR ← MBR[AD] | 명령어의 주소를 MAR에 |
| T1 | MBR ← M[MAR] | 메모리에서 값 읽기 |
| T2 | MBR ← MBR + 1 | MBR 값 1 증가 |
| T3 | M[MAR] ← MBR | 증가된 값을 메모리에 저장 |
| T4 | IF(MBR=0) THEN PC ← PC+1 | 0이면 다음 명령 건너뛰기 |
AND와 ADD는 논리·산술 연산을, LDA와 STA는 데이터 전송을, BUN·BSA·ISZ는 제어 흐름 변경을 맡는다. 이런 기본 명령어의 조합으로 복잡한 프로그램이 구성되며, 현대 RISC 아키텍처의 기본 개념도 단순하고 규칙적인 명령어 설계에서 출발한다.