CPU의 현재 상태나 연산 결과와 관련된 정보를 보여준다. 각 비트 위치는 각각의 이름이 주어져 있다. 다음 페이지 표에는 8086/8088 플래그 레지스터의 비트 위치를 보이고 있다.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
✖ |
✖ |
✖ |
✖ |
O |
D |
I |
T |
S |
Z |
✖ |
A |
✖ |
P |
✖ |
C |
O=Overflow D=Direction I=Interrupt T=Trap S=Sign Z=Zero A=Auxiliary Carry P=Parity C=Carry ✖=undefined |
1.제어 플래그
방향(direction : DF),인터럽트(Interrupt : IF),트랩(Trap : TF)플래그로 구성되며 CPU의 작동을 제어하기 위한 플래그이다.
플래그 종류 |
기능 |
방향 플래그 (DF) |
MOVS, CMPS, SCAS같은 명령어들의 블록 데이터 이동에 영향을 준다. 방향 플래그의 값이 0이면 데이터 주소가 증가하고 1이면 감소한다. |
인터럽트 플래그 (I F) |
시스템 인터럽트들이 처리되거나 되지 않도록 명령한다. 인터럽트는 키보드, 디스크 드라이브, 시스템 클럭 타이머 같은 하드웨어 장치들에 의해 발생할 수 있다. 플래그값이1이면 인터럽트가 허용되고 0이면 금지한다. |
트랩 플래그 (TF) |
명령어 하나하나가 실행된 후 CPU가 정지 상태로 되어야 할지 말지를 결정한다. 이 플래그가 설정되면 오류 수정 프로그램이 프로그래머로 하여금 프로그램 명령어들을 한번에 하나씩 실행시킬 수 있어, 프로그램 추적에 의한 오류 수정이 가능해진다. 이 플래그 값이 1이면 트레이스가 허용되고 0이면 금지된다. |
2.상태 플래그
CPU가 산술 및 논리 연산의 결과를 반영한다. 오버플로우(Overflow), 부호(sign), 제로(Zero), 보조 캐리(Auxiliary Carry), 패리티(Parity), 캐리(Carry) 플래그들이 있다.
플래그 종류 |
기능 |
오버플로우 플래그 (OF) |
부호 있는 연산 결과가 너무 많은 비트들을 요구하여 목적지 피연산자에 저장되지 못할 때 설정된다. 이 플래그가 1이면 오버플로우가 발생할 때 이고 0이면 오버플로우가 발생하지 않았음을 나타낸다. |
부호 플래그 (SF) |
산술 및 논리 연산의 결과가 음의 수가 될 때 설정된다. 음의 수는 항상 최상위 비트 위치가 1이므로, 부호 플래그는 항상 목적지 피연산자의 부호 비트로 복사된다. 이 플래그의 값이 0이면 양수, 1이면 음수를 나타낸다. |
제로 플래그 (ZF) |
산술 및 논리 연산의 결과가 0일 때 설정된다. 이 플래그값이 1이면 두 값을 비교하여 같은 경우이고 0이면 같지 않은 경우이다. |
보조 캐리 플래그 (AC) |
피연산자의 비트 3에서 비트 4로 자리올림이 발생했거나 비트 4에서 비트 3으로 자리내림이 발생할 때 설정되며 다른 플래그에 비해 사용빈도는 작다. 플래그 값이 1이면 자리올림이나 자리내림이 발생할 경우이고 0이면 발생하지 않은 경우이다. |
패리티 플래그 (PF) |
연산 결과에서 값이 1인 비트의 수를 나타낸다. 비트의 수가 짝수이면 짝수 패리티이고 홀수이면 홀수 패리티가 된다. 이 플래그는 데이터 전송시 에러 검출을 위해 사용된다. |
캐리 플래그 (CF) |
부호 없는 산술 연산 결과가 너무 커서 자리 올림이 발생할 때 설정된다. 이 플래그가 1이면 캐리가 발생한 것이고, 0이면 캐리가 발생하지 않은 것이다. |