플래그 레지스터
개요
- 목적: 플래그 레지스터는 산술 또는 논리 연산의 결과를 반영하는 상태 비트(플래그)를 저장하는 특수 목적 레지스터입니다. 각 비트는 결과가 0인지, 음수인지, 캐리가 발생했는지, 오버플로가 발생했는지 등 특정 조건에 해당합니다.
- 기호: 7개의 입력(4개의 플래그 데이터 버스 입력 + CLK + LD + 플래그 입력)과 4개의 플래그 출력(Z, C, N, V)을 가진 직사각형 레지스터 블록으로 표현됩니다.
- DigiSim.io 역할: 컴퓨터 아키텍처 시뮬레이션에서 핵심 부품으로 사용되며, 이전 계산 결과에 기반한 조건부 연산 및 의사 결정을 가능하게 합니다.

기능 설명
논리 동작
플래그 레지스터는 ALU 또는 기타 연산 유닛이 생성한 상태 정보를 캡처하고 저장합니다. 레지스터의 각 비트는 특정 조건이나 상태를 나타냅니다.
플래그:
| 플래그 | 셋 조건 | 클리어 조건 |
|---|---|---|
| Zero (Z) | 연산 결과가 0 | 결과가 0이 아님 |
| Carry (C) | 부호 없는 덧셈 오버플로 / 뺄셈 빌림 | 부호 없는 오버플로 없음 / 빌림 없음 |
| Negative (N) | 결과의 최상위 비트(MSB)가 1 | 결과의 MSB가 0 |
| Overflow (V) | 부호 있는 산술 연산이 오버플로됨 | 부호 있는 오버플로 없음 |
입력 및 출력
입력 (총 7개):
- Zero (Z): 핀 0. ALU로부터의 제로 플래그 입력 (버스 입력).
- Carry (C): 핀 1. ALU로부터의 캐리 플래그 입력 (버스 입력).
- Negative (N): 핀 2. ALU로부터의 네거티브 플래그 입력 (버스 입력).
- Overflow (V): 핀 3. ALU로부터의 오버플로 플래그 입력 (버스 입력).
- Flag In: 핀 4. 추가 플래그 입력 (버스 입력).
- CLK: 핀 5. 클럭 입력 — 상승 에지에서 플래그가 캡처됩니다.
- LD (Load): 핀 6. 로드 인에이블 — 상승 클럭 에지에서 LD가 HIGH일 때만 플래그가 업데이트됩니다.
출력 (총 4개):
- Z: 핀 0. 제로 플래그 출력.
- C: 핀 1. 캐리 플래그 출력.
- N: 핀 2. 네거티브 플래그 출력.
- V: 핀 3. 오버플로 플래그 출력.
설정 가능한 매개변수
- 포함된 플래그: 구현된 특정 상태 플래그 (아키텍처에 따라 다름).
- 플래그 동작: 각 플래그가 특정 연산에 어떻게 반응하는지.
- 클럭 에지 감도: 레지스터가 상승 또는 하강 클럭 에지에서 업데이트되는지 여부.
- 로드 제어: 플래그가 개별적으로 또는 그룹으로 업데이트되는지 여부.
- 전파 지연: 플래그 출력이 입력 변화를 반영하는 데 걸리는 시간.
DigiSim.io에서의 시각적 표현
플래그 레지스터는 왼쪽에 레이블이 지정된 입력(상태 비트, CLK, Load)과 오른쪽에 개별 플래그 출력(Z, C, N, V 등)이 있는 직사각형 블록으로 표시됩니다. 회로에 연결되면 출력 값과 연결 와이어의 색상 변화를 통해 각 플래그의 상태를 시각적으로 나타냅니다.
교육적 가치
핵심 개념
- 조건부 실행: 컴퓨터가 연산 결과에 기반하여 어떻게 결정을 내리는지 보여줍니다.
- 상태 추적: 디지털 시스템이 계산 결과를 어떻게 추적하는지 보여줍니다.
- 컴퓨터 아키텍처: CPU 설계의 기본 부품을 설명합니다.
- 상태 정보: 후속 연산에서 사용하기 위한 상태 정보 유지 개념을 소개합니다.
- 디지털 피드백: 연산 결과가 향후 처리 경로에 어떻게 영향을 미치는지 보여줍니다.
학습 목표
- 상태 플래그가 산술 및 논리 연산의 결과를 어떻게 캡처하는지 이해합니다.
- 플래그가 컴퓨터 프로그램에서 조건부 분기 및 의사 결정을 어떻게 가능하게 하는지 배웁니다.
- CPU 아키텍처 및 명령어 실행에서 플래그 레지스터의 역할을 인식합니다.
- 조건부 연산에서 프로그램 흐름을 예측하기 위해 플래그 지식을 적용합니다.
- 다중 정밀도 산술이 캐리 및 오버플로 플래그에 어떻게 의존하는지 이해합니다.
사용 예시
- 조건부 분기: Jump if Zero (JZ), Jump if Carry (JC), Jump if Not Zero (JNZ) 명령어가 플래그를 사용하여 프로그램 흐름을 변경합니다.
- 다중 정밀도 산술: 캐리 플래그를 사용하여 여러 워드에 걸친 연산을 연결합니다 (예: 32비트 ALU에서 64비트 수 더하기).
- 오류 감지: 오버플로 플래그를 모니터링하여 부호 있는 연산의 산술 오류를 감지합니다.
- 루프 제어: 루프 카운터가 종료 값에 도달했는지 확인하기 위해 제로 플래그를 검사합니다.
- 인터럽트 관리: 외부 이벤트에 대한 시스템 응답성을 제어하기 위해 인터럽트 플래그를 설정하거나 해제합니다.
- 상태 보고: 플래그를 사용하여 상위 레벨 소프트웨어에 연산 결과를 전달합니다.
기술 참고사항
- 플래그 레지스터는 일반적으로 각 플래그 비트에 대해 하나의 플립플롭으로 구성됩니다.
- 서로 다른 CPU 아키텍처는 다른 플래그 세트를 포함하며 다르게 해석할 수 있습니다.
- 플래그 동작은 명령어에 따라 다를 수 있으며, 일부 명령어는 모든 플래그에 영향을 주고 다른 명령어는 특정 플래그에만 영향을 줄 수 있습니다.
- 많은 CPU 설계에서 플래그 레지스터는 더 큰 프로그램 상태 워드(PSW) 또는 상태 레지스터의 일부입니다.
- 컨텍스트 전환, 인터럽트, 서브루틴 호출 중에 플래그 레지스터를 저장하고 복원하는 것이 종종 필요합니다.
- DigiSim.io에서 플래그 레지스터 동작은 입력 조건에 기반한 적절한 플래그 설정 및 해제로 일반적인 CPU 아키텍처를 모델링합니다.