Skip navigation.
Home
Seoul North West Side Linux User Group

EFLAGS

C (Carry) 덧셈 후에 올림수가 발생하거나, 뺄셈 후에 내림수가 발생한 것을 나타냅니다. Carry 플래그는 또한 몇몇 프로그램과 프로시져에서 오류 조건으로 표시되기도 합니다.

P (Parity) 홀수 패리티에 대해서는 논리적인 0, 짝수 패리티에 대해서는 논리적인 1 입니다. 패리티는 수에서 1의 갯수를 나타내는 것으로 홀수, 혹은 짝수로 표현합니다. 예를 들어, 이진화 된 한 수에서 1의 갯수가 3개라면, 이 수는 홀수 패리티입니다. 만약 1이 한개도 없다면 이 수는 짝수 패리티 입니다.

A (Auxiliary Carry) 덧셈이나 뺄셈에서 3, 4 번째 비트 사이의 올림수나 내림수를 나타냅니다. 이것은 DAA나 DAS 명령어가 분별하는 아주 특별한 레지스터로 AL 의 값을 BCD(Binary Converted Decimal, 2진수를 10진수 한자리로 나타내는 방법) 덧셈이나 뺄셈 후에 조절하는데 사용합니다. BCD 이외에는 마이크로프로세서에선 사용되지 않습니다.

Z (Zero) 수식연산이나 논리연산의 결과가 0 임을 나타냅니다. 만약 Z = 1 이면, 결과값이 0 이며, Z = 0 이라면 결과는 0 이 아닙니다.

S (Sign) 덧셈이나 뺄셈 후의 결과값 부호를 나타냅니다. 만약 S = 1 이면, 음수를 나타내며, S = 0 이면, 양수임을 나타냅니다.

T (Trap) 이 플래그가 설정되면, CPU 내부의 디버깅 요소를 통해 트랩핑을 사용할 수 있습니다. 더 자세한 내용은 이후의 디버그 부분에서 자세하게 설명하겠습니다.

I (Interrupt) 인터럽트는 INTR(Interrupt Request) 입력 핀의 동작을 제어합니다. 만약 I = 1 이면, INTR 핀을 사용가능하며 I = 0 이면 INTR 핀을 사용할 수 없습니다. I 플래그 비트의 상태를 STI (SeT I flag) 명령과 CLI (CLear I flag) 명령을 사용하여 제어할 수 있습니다.

D (Direction) 문자열 명령을 진행하는 동안 DI 혹은 SI 레지스터에 대해 증가할 것인가 감소할 것인가를 선택하도록 제어합니다. D = 1 이면, 레지스터 값은 자동으로 감소하며, D = 0 이라면 자동으로 레지스터 값이 증가합니다. D 플래그는 STD(SeT D flag) 명령으로 설정되며, CLD(CLear D flag) 명령으로 해제됩니다.

O (Overflow) 부호화된 수가 가감될 때 발생하는 조건입니다. 오버플로우(Overflow)는 CPU 의 계산영역 용량을 초과한 결과를 나타냅니다. 예를 들어, 7FH (+127) 에 01H (+1) 을 더하였을 때, 그 결과값이 80H (-128) 이 됩니다. 이 결과값은 부호를 갖는 덧셈에 대해 오버플로우 플래그로 오버플로우 조건을 나타냅니다. 부호화되지 않은 연산에 대해서는 오버플로우 플래그를 무시합니다.

IOPL (Input/Output Privilege Level) I/O 장치에 대해 특권 레벨을 선택하기 위한 보호 모드 작업에서 사용되는 동작입니다. 만약 현재 특권 레벨이 더 높거나 IOPL 보다 더 신뢰된다면, I/O 는 아무런 문제없이 실행됩니다. 만약 IOPL 이 현재 특권 레벨보다 낮다면, 의존되기 위한 수행으로 인해 인터럽트가 발생합니다. 00의 IOPL이 가장 높으며 가장 신뢰되고 11의 값이 가장 낮으며 제일 신뢰되지 않음을 주의하십시오.

NT (Nested Task) 보호 모드 작동에서 다른 작업 안에서 현재 작업이 있음을 나타냅니다. 이 플래그는 작업이 소프트웨어에 의해 작업이 내부에 있을 때 설정됩니다.

RF (Resume) 다음 명령어 이후에 실행을 재개하도록 제어하는데 디버깅과 함께 사용됩니다.

VM (Virtual Mode) 보호 모드 시스템에서 가상 모드 작동을 선택합니다. 가상 모드 시스템은 다중 DOS 메모리 파티션을 허용합니다.

AC (Alignment Check) 만약 워드(word)나 더블 워드(Double Word)가 워드 경계가 아닌 곳이나 더블 워드 경계가 아닌 곳에 지정될 경우 이 플래그가 설정됩니다. 오직 80486SX 마이크로 프로세서만 적절한 수치연산 코프로세서와 함께 우선적으로 사용되는 정렬 확인 비트를 포함합니다.

Segment Registers 세그먼트 레지스터라 불리는 추가적인 레지스터들은 마이크로프로세서 내에서 다른 레지스터들과 함께 메모리 주소들을 생성합니다. 8086-80486 마이크로프로세서의 다양한 버전에서 4개 혹은 6개의 레지스터가 있습니다. 세그먼트 레지스터는 마이크로프로세서의 보호모드와 실제모드에서 다르게 동작합니다. 보호모드와 실제모드에서의 자세한 동작 차이점은 이 장 이후에 설명합니다. 다음은 시스템에서 각 세그먼트 레지스터의 기능과 함께 한 레지스터 목록입니다.

CS (Code) 코드 세그먼트는 프로그램에 의해 사용되는 프로그램과 프로시저를 갖고 있는 메모리의 선택입니다. 코드 세그먼트 레지스터는 코드를 가지고 있는 메모리의 시작 선택 주소를 정의합니다. 실제모드 작동에서 이것은 메모리의 64 KB 범위의 시작 주소를 정의하며, 보호모드에서는 코드를 가지고 있는 메모리 주소의 시작위치와 길이를 서술하는 서술자(descriptor)를 선택합니다. 코드 세그먼트의 길이는 8086-80286 에서 64 KB 로 제한되며, 80386/80486 은 4 GB 로 제한됩니다.

DS (Data) 데이터 세그먼트는 프로그램에 의해 사용되는 대부분의 데이터를 포함하는 부분입니다. 데이터는 오프셋 주소나 오프셋 주소를 갖는 다른 레저스터들의 내용에 의해 데이터 세그먼트안에서 접근됩니다.

ES (Extra) 엑스트라 세그먼트(Extra Segment)는 몇몇의 문자열 명령어에서 사용되는 추가적인 데이터 세그먼트입니다.

SS (Stack) 스택 세그먼트는 스텍에 대해 사용되는 메모리 영역을 정의합니다. 스택 세그먼트에서 현재 항목 포인트의 위치는 스택 포인터(SP) 레지스터에 의해 결정됩니다. BP 레지스터 또한 스택 세그먼트안에서 데이터를 지정합니다.

FS와 GS 이 추가적인 세그먼트 레지스터들은 80386 과 80486 마이크로 프로세서에서 사용가능합니다. 프로그램에 의해 접근가능한 추가적인 두 개의 메모리 세그먼트를 허용하기 위해 사용됩니다.