범용 레지스터(General Purpose Register)
범용 레지스터는 주 용도가 있으나, 그 외 임의의 용도로도 사용 가능한 레지스터이다.
- EAX (Accumulator Register)
- 산술 연산 및 논리 연산과, 함수의 반환 값 저장에 사용된다.
- ECX (Count Register)
- 반복문의 반복 횟수나, 각종 연산의 시행 횟수 등을 저장할 때 사용된다.
- EDX (Data Register)
- EAX와 함께 사용되며, 일반적인 자료를 저장하거나 입출력 연산에 사용된다.
인덱스 레지스터(Index Register)
- ESI (Source Index)
- 데이터를 옮길 때 원본(Source) 주소 값을 저장한다.
- EDI (Destination Index)
- 데이터를 옮길 때 목적지(Destination) 주소 값을 저장한다.
포인터 레지스터(Pointer Register)
- ESP (Stack Pointer)
- 스택의 가장 끝 주소(하위 주소)를 가리킨다.
- 스택에 값을 PUSH할 땐 ESP의 값이 증가, POP할 땐 ESP의 값이 감소한다.
- EIP (Instruction Pointer)
세그먼트 레지스터(Segment Register)
코드, 데이터, 스택 등 세그먼트에 대한 주소를 가리키기 위해 사용된다.
- CS (Code Segment Register)
- 실행할 기계 명령어가 저장된 메모리 주소를 저장한다.
- 코드 세그먼트의 시작 주소를 가리킨다.
- DS (Data Segment Register)
- 프로그램에 정의된 데이터 세그먼트의 시작 주소를 가리킨다.
- SS (Stack Segment Register)
- 프로그램 스택 세그먼트(실행 과정에서 필요한 데이터나 연산 결과 등을 임시로 저장하거나, 삭제할 때 사용)의 시작 주소를 가리킨다.
- ES, FS, GS(Extra Segment Register)
- 문자 연산, 추가 메모리를 지정하는 데 사용하는 여분의 레지스터이다.
- ES 레지스터는 추가로 사용된 데이터 세그먼트의 주소를 가리키며, FS, GS 레지스터 또한 목적인 비슷하나 실제로 거의 사용되지 않는다.
플래그 레지스터(Flag Register)
프로세스의 현재 상태를 저장하고 있는 레지스터이다.
- CF (Carry Flag)
- 부호 없는 숫자의 연산 결과가 비트의 범위를 넘을 경우 설정된다.
- OF (Overflow Flag)
- 부호 있는 숫자의 연산 결과가 비트 범위를 넘을 경우 설정된다.
- AF (Adjust Flag)
- 연산 결과 하위 4bit에서 비트 범위를 넘을 경우 설정된다.
- DF (Direction Flag)
- 문자열 명령을 제어해, DF가 설정되어 있으면 문자열을 높은 주소에서 낮은 주소로, 설정되어 있지 않으면 낮은 주소에서 높은 주소로 처리한다.
- TF (Trap Flag)
- 디버깅을 할 때 사용되며, 설정되어 있을 경우 Single Step Mode(한번에 한 명령어만 실행되는 모드)가 된다.
- IF (Interrupt enable Flag)
- 프로세스의 인터럽트 처리 여부를 제어하며, IF가 설정되어 있으면 시스템의 인터럽트를 처리하고, 0이면 무시한다.