본문 바로가기

System

Flag 레지스터 [Reversing]

 

Flag 레지스터는 test, cmp 명령을 통해 즉, 조건문을 통과한 후 조건에 따른 참 거짓을 보여주는 레지스터입니다. 단순히 맞다 틀리다가 아닌 '어떤 상황이다.'를 알려주기 때문에 Flag 레지스터를 확인하는 것은 중요합니다.

 

 

<Flag 레지스터 상태>

 

 

 - 각각의 Flag의 의미는 다음과 같다.

 

ZF : 비교 연산과정 후 두 값이 같으면 즉, 두 값을 뺏을 때 0이 되면 같다는 의미로 '1'로 셋트 된다.

 

PF : 비교 연산 후 하위 1byte 중 1bit가 짝수 이면 '1' 홀수 이면 '0'으로 셋트된다.

 

AF : 산술 논리 연산 후 하위 3bit에 올림 또는 내림이 발생할 경우 '1'로 셋트된다.

 

OF : 산술 논리 연산 후 결과값이 넘칠 경우 '1'로 셋트된다.

 

SF : 비교 후 최상위 비트가 0이면 양수 1이면 음수를 나타낸다.

 

DF : '1'로 셋트돼있으면 높은 주소에서 낮은 주소로 처리를 하고 '0'으로 셋트 돼있으면 낮은 주소에서 높은 주소로 처리를 한다.

 

CF : 산술 논리 연산 후 자리 올림이나 내림이 발생했을 때 '1'로 셋트된다.

 

TF : 디버깅 시 single step mode 를 설정했을 경우 '1'로 셋트된다. 명령 실행시 TF를 이용하여 한 명령어씩 실행하게 할 수 있다.

 

IF : 프로세스로 부터 인터럽트가 발생하면 인터럽트를 실행할 것인지 설정할 때 사용된다. '1'로 셋트 되어있으면 인터럽트 발생시 인터럽트를 처리하고 '0'은 처리하지 않는다.(외부 장치인 키보드, 마우스도 인터럽트로 처리 된다.)

 

 - 해당 Flag 값을 이용하여 jmp 명령으로 원하는 작업을 수행 할 수있다.

 

 

<점프 명령어>

 

 

반응형