x86 레지스터
둘러보기로 이동
검색으로 이동
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
부동소수점 레지스터
이름 | 크기 | 설명 | 비고 |
---|
주석
- ↑ 플래그를 설정 혹은 해제하는 전용 명령어를 통하여 일부 플래그를 조작가능.
x86 관련 문서
- x86 아키텍쳐 CPU : 8086, 486
- x86 레지스터
- x86 어셈블리 언어
- 인텔 아키텍처 매뉴얼