x86 레지스터

KANOTYPE WIKI
둘러보기로 이동 검색으로 이동

x86 레지스터는 인텔의 x86 아키텍쳐 CPU에 사용되는 레지스터에 관한 문서이다.

개요

IA-16 아키텍쳐에 사용되던 레지스터를 그대로 사용할 수 있으며, 모든 레지스터들은 32비트 크기로 확장되었다. 레지스터명 앞의 E는 확장을 의미한다. 레지스터명에서 앞의 E를 제외하면 (EAX -> AX) 그대로 하위 16비트에 접근할 수 있다. 32비트 레지스터의 상위 16비트에 직접 접근하는 방법은 없고, 상위 16비트를 하위 16비트로 밀어내서 접근하는 우회 접근이 가능하다.

일반 레지스터

이름 크기 설명 비고
EAX 32bit 누적 연산기. 각종연산에 사용하며 연산시에 다른 레지스터보다 속도가 빠르다.
ECX 32bit 카운터. 전송이나 반복횟수를 세는 카운터.
EDX 32bit 데이터. 일시적으로 데이터를 기억하며 EAX와 조합하여 32비트 곱셈, 나눗셈을 하는데 이용하기도 한다.
EBX 32bit 베이스. 특정 메모리를 가리키는 포인터.

일반 16비트 레지스터는 상위 8비트와 하위 8비트로 나누어서 접근할 수 있다. 각 레지스터명에서 X를 빼고 H와 L을 붙이면 된다. (AX->하위 8비트 AL, 상위 8비트 AH)

주소 레지스터

이름 크기 설명 비고
ESP 32bit Stack Pointer.
EBP 32bit Base Pointer.
ESI 32bit Source Index.
EDI 32bit Destination Index.
EIP 32bit Instruction Pointer. 현재 실행되는 명령 주소를 기억한다.

주소 레지스터 또한 하위 16비트에 접근할 수 있다(EBP -> BP). 하지만 16비트 레지스터를 다시 8비트 상하로 접근은 불가능하다.

세그먼트 레지스터

이름 크기 설명 비고
ES 16bit 엑스트라 세그먼트. DS로 지정하는 세그먼트 외의 세그먼트 주소를 보관한다.
CS 16bit 코드 세그먼트. 기계어 프로그램이 기억된 세그먼트의 세그먼트 주소를 보관한다. CPU가 기계어 프로그램을 읽어들일 때(EIP레지스터) 자동으로 사용된다.
SS 16bit 스택 세그먼트. 스택 전용으로 사용하는 세그먼트 주소를 보관한다. 스택 사용시(PUSH, POP, CALL, RET등) 또는 BP레지스터 사용시에 자동으로 사용된다.
DS 16bit 데이터 세그먼트. 데이터를 기억하는 세그먼트 주소를 보관한다. 메모리와 레지스터간의 데이터 전송시에 자동으로 사용된다.
FS 16bit 명칭 없음. 보조 세그먼트 2번째
GS 16bit 명칭 없음. 보조 세그먼트 3번째

플래그 레지스터(EFLAGS)

플래그 레지스터는 직접 그 내용을 조작할 수는 없고[1], 레지스터안의 각 비트가 상황에따라 0 또는 1로 설정되는 플래그로서 사용되는 32bit 레지스터이다.

상태 플래그
이름 비트 설명
CF 0 Carry Flag.
PF 2 Parity Flag
AF 4 Adjust Flag
ZF 6 Zero Flag
SF 7 Sign Flag
OF 11 Overflow Flag
Direction Flag
DF 10 문자열 명령(MOVS, CMPS, SCAS, LODS, STOS)의 자동 주소 증가의 방향을 결정한다.
DF가 0일때 증가하는 방향으로 커지며 1일때 감소한다.
시스템 & IOPL 플래그
TF 8 Trap Flag
IF 9 Interrupt enable Flag
IOPL 12 & 13 I/O Privilege Level field
NT 14 Nested Task flag
RF 16 Resume Flag
VM 17 Virtual-8086 Mode flag
AC 18 Alignment Check flag
VIF 19 Virtual Interrupt Flag
VIP 20 Virtual Interrupt Pending flag
ID 21 IDentification flag

시스템 레지스터

이름 크기 설명 비고
GDTR 48bit 보호 모드에서의 GDT에 대한 정보를 보관한다. 하위 16bit에 한계값을, 상위 32bit에 선두 선형 주소를 보관한다. 값 지정에는 LGDT명령을 이용한다.
IDTR 48bit
LDTR 16bit
GDTR 16bit
CR0 32bit
CR1 32bit
CR2 32bit
CR3 32bit

디버그 레지스터

DR0 ~ DR7, TR3 ~ TR7

부동소수점 레지스터

이름 크기 설명 비고

주석

  1. 플래그를 설정 혹은 해제하는 전용 명령어를 통하여 일부 플래그를 조작가능.

x86 관련 문서