{{위키데이터 속성 추적}}
'''상태 레지스터''' 또는 '''플래그 레지스터'''는 [[마이크로프로세서]]에서 다양한 산술 연산 결과의 상태를 알려주는 플래그 비트들이 모인 [[프로세서 레지스터|레지스터]]이다.

주로, 조건문과 같은 실행 순서의 분기에 사용된다.

== 상태 레지스터 플래그 ==
상태 레지스터에는 다음과 같은 플래그들이 있다.
{| class="wikitable"
|-
!style="background:#D0E0FF;width:10%"|플래그 기호
!style="background:#D0E0FF;width:15%"|이름
!style="background:#D0E0FF;width:65%"|의미
|-
| align="center" |Z
| align="center" |제로 플래그
|연산 결과가 0일 경우에 참이 된다.
|-
| align="center" |C
| align="center" |캐리 플래그
|부호 없는 숫자의 연산 결과가 비트 범위를 넘어섰을 때 참이 된다.
|-
| align="center" |A
| align="center" |보조 캐리 플래그
|연산 결과 하위 니블(4bits)에서 비트 범위를 넘어섰을 때 참이 된다. [[이진화 십진법]](BCD) 연산에 사용된다.
|-
| align="center" |V / O / W
| align="center" |오버플로 플래그
|부호 있는 숫자의 연산 결과가 비트 범위를 넘어섰을 때 참이 된다.
|-
| align="center" |N / S
| align="center" |네거티브 플래그, 사인 플래그
|연산 결과가 음수일 때 참이 된다.
|-
| align="center" |I / E
| align="center" |인터럽트 플래그
|이 플래그가 참일 경우에만 인터럽트 요구를 받아들인다. 일반적으로 [[관리자 모드]]에서만 값을 변경 할 수 있다.
|-
| align="center" |P
| align="center" |패리티 플래그
|연산 결과에서 1로된 비트의 수가 짝수일 경우 참이 된다.
|-
| align="center" |D
| align="center" |디렉션 플래그
|문자열 조작에서 참일 경우 주소 레지스터 값이 자동으로 감소하고, 거짓일 경우 자동으로 증가한다.
|-
| align="center" |D / T
| align="center" |디버그 플래그, 트랩 플래그
|참일 경우 한 명령이 실행할 때마다 인터럽트가 발생한다. 디버깅에 사용된다.
|}

== 상태 레지스터의 구조 ==
상태 레지스터의 구조는 프로세서의 설계에 따라 플래그의 기능이 약간씩 다를 수 있으며, 일부 아키텍처는 상태 레지스터가 존재하지 않는다.<REF>MIPS와 아이테니엄 아키텍처는 상태 레지스터가 존재하지 않는다.</ref>
=== 6502 ===
플래그 바이트로 불리며, 크기는 8비트이다.
{| class="wikitable"
|-
!style="background:#D0E0FF;width:15px"|7
!style="background:#D0E0FF;width:15px"|6
!style="background:#D0E0FF;width:15px"|5
!style="background:#D0E0FF;width:15px"|4
!style="background:#D0E0FF;width:15px"|3
!style="background:#D0E0FF;width:15px"|2
!style="background:#D0E0FF;width:15px"|1
!style="background:#D0E0FF;width:15px"|0
|-
| align="center" |N
| align="center" |V
| align="center" |
| align="center" |B
| align="center" |D
| align="center" |I
| align="center" |Z
| align="center" |C
|}

* Bit 4. 브레이크 플래그 : BRK 인터럽트의 발생을 알려준다.<ref>6502은 BRK와 IRQ 두 종류의 인터럽트가 있다.</ref>
* Bit 3. 십진 플래그 : 참일 경우 [[이진화 십진법]] 모드에서 동작한다.

=== Z-80 ===

{| class="wikitable"
|-
!style="background:#D0E0FF;width:15px"|7
!style="background:#D0E0FF;width:15px"|6
!style="background:#D0E0FF;width:15px"|5
!style="background:#D0E0FF;width:15px"|4
!style="background:#D0E0FF;width:15px"|3
!style="background:#D0E0FF;width:15px"|2
!style="background:#D0E0FF;width:15px"|1
!style="background:#D0E0FF;width:15px"|0
|-
| align="center" |S
| align="center" |Z
| align="center" |
| align="center" |H
| align="center" |
| align="center" |P/V
| align="center" |N
| align="center" |C
|}

* Bit 4. Half-carry 플래그 : [[이진화 십진법]] 변환 연산인 DAA와 같은 연산에서 사용.
* Bit 2. Parity / Overflow 플래그: (마지막) 연산이 (AND, OR, XOR와 같은) 8-bit 논리연산 혹은 shitf 연산이었다면 parity (0이면 odd), 산술계열 연산이었다면 overflow (1이면 overflow)를 나타냄.
* Bit 1. Negative 플래그 : (마지막) 연산이 빼기 계열의 연산 (SUB, SBC, DEC, CP)이면 1.
=== 8086 ===
[[파일:Flagregister.PNG|섬네일|right|8086의 상태 레지스터]]
플래그 레지스터로 불리며, 크기는 16비트이다.
{| class="wikitable"
|-
!style="background:#D0E0FF;width:15px"|15
!style="background:#D0E0FF;width:15px"|14
!style="background:#D0E0FF;width:15px"|13
!style="background:#D0E0FF;width:15px"|12
!style="background:#D0E0FF;width:15px"|11
!style="background:#D0E0FF;width:15px"|10
!style="background:#D0E0FF;width:15px"|9
!style="background:#D0E0FF;width:15px"|8
!style="background:#D0E0FF;width:15px"|7
!style="background:#D0E0FF;width:15px"|6
!style="background:#D0E0FF;width:15px"|5
!style="background:#D0E0FF;width:15px"|4
!style="background:#D0E0FF;width:15px"|3
!style="background:#D0E0FF;width:15px"|2
!style="background:#D0E0FF;width:15px"|1
!style="background:#D0E0FF;width:15px"|0
|-
| align="center" |
| align="center" |
| align="center" |
| align="center" |
| align="center" |O
| align="center" |D
| align="center" |I
| align="center" |T
| align="center" |S
| align="center" |Z
| align="center" |
| align="center" |A
| align="center" |
| align="center" |P
| align="center" |
| align="center" |C
|}

* Bit 10. 디렉션 플래그

== 각주 ==
<references/>

{{전거 통제}}

[[분류:디지털 레지스터]]
[[분류:제어 흐름]]