posted by 초식사자 2010.11.27 18:52

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이면 캐리가 발생하지 않은 것이다.




'악성코드 분석 > ASSEMBLY' 카테고리의 다른 글

연산자  (0) 2010.11.27
기본 명령어  (0) 2010.11.27
자료형  (0) 2010.11.27
어셈블리어  (0) 2010.11.27
플래그  (0) 2010.11.27
레지스터  (0) 2010.11.27

댓글을 달아 주세요