트랩 플래그(영어: trap flag)는 싱글 스텝 모드에서 프로세스의 동작을 허용한다. 만약 이 플래그가 사용 가능하다면, 디버거는 컴퓨터 프로그램의 실행에 들어가기 위해 이것을 사용할 수 있다. 

싱글-스텝 인터럽트

편집

시스템이 싱글 스텝으로 지시받은 경우, 시스템은 명령어 하나를 실행하고 정지한다. 이 때 레지스터와 메모리 위치의 내용은 검사되는데 올바르다면 시스템은 다음 명령어를 계속 실행할 수 있다. 인텔 8086 트랩 플래그와 type-1 인터럽트 반응은 8086 기반 시스템에서 싱글 스텝을 구현하는 것을 매우 쉽게 만들어 준다. 만약 트랩 플래그가 세팅되면 8086은 각 명령어 실행 후 자동적으로 type-1 인터럽트를 발생시킨다. 8086이 type-1 인터럽트를 발생시키면 플래그 레지스터는 스택에 푸시된다.

세팅

편집

인텔 8086은 직접적으로 트랩 플래그를 세팅 또는 리셋하는 명령어가 없다. 이러한 동작들은 스택에 프로그래머가 원하는 플래그 레지스터를 푸시함으로써 완료된다. 그리고 나서 스택에서 플래그 레지스터를 꺼는 방식이다. 트랩 플레그를 세팅하는 명령어는 아래와 같다.

  1. PUSHF ; 스택에 플래그들을 푸시한다.
  2. MOV BP,SP  ; 인덱스로서 SP를 BP 로 복사한다. 
  3. OR WORD PTR[BP+0],0100H ; TF 플래그를 세팅한다.
  4. POPF  ; 플래그 레지스터를 복구한다.

리세팅

편집

트랩 플래그를 리셋하기 위해, 단순히 전 과정의 OR 명령어를 아래와 같이 바꾼다.

AND WORD PTR[BP+0],0FEFFH

인텔 8086이 type-1 인터럽트를 발생시키면 트랩 플래그는 리셋되며, 싱글 스텝 모드는 인터럽트 서비스 절차 동안 비활성화 된다.

상태 레지스터
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 플래그