본문 바로가기

C.E/Assembly

Flag Register

1) Flag register

 Flag register는 CPU 내부 기구중 하나로 산술 연산 결과의 상태를 보여주는 flag bit들이 모인 레지스터이다.
산술 연산시 CPU에 의해 자동적으로 세팅되며 , 프로세서의 현재 상태를 결정한다.
상태레지스터라고 불리고 기종에 따라 condition register라고 불리기도한다.

 


상태 플래그 (Status flag)

Carry Flag (CF)
Unsigned overflow가 발생할 때 1로 세팅된다.
Parity Flag (PF)
연산결과에 1인 bit의 개수가 짝수개이면 1 , 홀수개이면 0으로 세팅된다.
Auxiliary Flag (AF)
연산결과 하위 4bit에 Unsigned overflow가 발생했을때 1로 세팅된다.
Zero Flag (ZF)
연산결과가 0일 때 1로 세팅된다.
Sign Flag (SF)
부호를 나타내는 flag로 연산결과의 MSB(Most Significant Bit)와 같다.
연산결과가 양수이면 0 , 음수이면 1로 세팅된다.
Overflow Flag (OF)
Signed overflow가 발생할 때 1로 세팅된다.


컨트롤 플래그 (Control flag) : CPU의 동작상태를 제어하는 flag

Trap Flag (TF)
Trap flag가 1로 세팅되면 명령어를 한개 수행하고 , 0x01 inturrupt (the debug interrupt)를 발생시키게 되는데 0x01 inturrupt가 발생하면 디버거가 해당 프로세스를 attach 할 수 있는 상태가 된다.
Interrupt enable Flag (IF)
Interrupt enable Flag가 1로 세팅되면 외부 인터럽트 요구는 무시되고 , 0으로 세팅되면 외부 인터럽트요구를 받아들인다.
Direction Flag (DF)
데이터를 다른 메모리에 복사할때 방향을 결정하는 flag이다.
Direction flag가 0으로 세팅되있을동안 데이터 주소를 가르키는 레지스터가 증가하고 , 1로 세팅되있을동안 데이터 주소를 가르키는 레지스터가 감소한다.




2) 연산에 따른 flag bit

Signed
CF ZF SF OF
ADD X>0 , Y>0 , X+Y<RANGE 0 0 0 0
ADD X>0 , Y>0 , X+Y>RANGE 0 0 1 1
SUB X>0 , Y>0 , X>Y 0 0 0 0
SUB X>0 , Y>0 , X<Y 1 0 1 0
SUB X>0 , Y>0 , X=Y 0 1 0 0


Unsigned
CF ZF SF OF
ADD X>0 , Y>0 , X+Y<RANGE 0 0 0 0
ADD X>0 , Y>0 , X+Y>RANGE 1 0 1 0
SUB X>0 , Y>0 , X>Y 0 0 0 0
SUB X>0 , Y>0 , X<Y 1 0 1 0
SUB X>0 , Y>0 , X=Y 0 1 0 0

 

'C.E > Assembly' 카테고리의 다른 글

SP ; Stack Pointer  (0) 2014.04.22
어셈블리 명령어 모음  (0) 2014.04.15