Medium[x86] 레지스터 기본 구조. Registers | by Mangryang | Medium
Sitemap
Mangryang

Mangryang

망량의 게임 기술 블로그

[x86] 레지스터 기본 구조

Registers

6 min readNov 10, 2025

--

x86은 32비트 프로세서로, 레지스터의 기본 크기는 32비트이다.
x86의 각 레지스터들에 대해 알아보자.

Press enter or click to view image in full size

범용 레지스터 (GPR, General Purpose Register)

범용 레지스터는 CPU가 데이터를 일시적으로 저장하고, 연산을 수행하거나 주소 계산 등에 자유롭게 사용할 수 있는 레지스터를 통칭한다.

x86 아키텍처에서 사용되는 범용 레지스터는 다음과 같다.

EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI

이 중 ESP와 EBP는 스택의 구조와 함수 스택 프레임의 무결성을 유지하기 위해 직접 수정하면 안 되는 레지스터로 간주된다.
이는 운영체제와 컴파일러가 그러한 규약을 정한 것으로 실제 하드웨어 상으로는 일반 범용 레지스터들과 동일한 구조와 접근 방식으로 설계되어 있어, 이론적으로 다른 연산에도 사용할 수 있다.

EAX (Extended Accumulator)

EAX는 산술/논리 연산과 함수 반환 값 저장에 사용되는 32비트 레지스터이다.
다음과 같이 EAX의 일부 비트만 이용하여 16비트/8비트 연산을 수행할 수 있다.

AX: EAX의 하위 16비트

AH: AX의 상위 8비트
AL: AX의 하위 8비트

ECX (Extended Counter)

ECX는 루프 반복 카운터나 시프트 연산의 이동 횟수를 저장하는 데 사용된다.
ECX도 마찬가지로 다음과 같이 특정 비트에 접근 가능하다.

CX: ECX의 하위 16비트

CH: CX의 상위 8비트
CL: CX의 하위 8비트

EDX (Extended Data)

EDX는 EAX와 함께 사용되는 레지스터로, 확장된 연산에 필요한 상위 비트를 저장하는 데 사용된다.

DX: EDX의 하위 16비트

DH: DX의 상위 8비트
DL: DX의 하위 8비트

EBX (Extended Base address)

EBX는 주로 메모리 주소 계산에서 기준으로 사용되는 32비트 레지스터이다.

BX: EBX의 하위 16비트

BH: BX의 상위 8비트
BL: BX의 하위 8비트

ESP (Extended Stack Pointer)

ESP는 현재 스택의 탑(최상단) 주소를 저장하는 32비트 레지스터이다.

SP: ESP의 하위 16비트

SP는 H와 L로 분리할 수 없다.

EBP (Extended Base Pointer)

EBP는 현재 스택의 바텀(최하단) 주소를 저장하는 32비트 레지스터이다.

BP: EBP의 하위 16비트

BP는 H와 L로 분리할 수 없다.

ESI (Extended Source Index)

ESI는 데이터의 조작 및 복사 작업 시, 소스 데이터의 주소를 저장하는 레지스터이다.

SI: ESI의 하위 16비트

SI는 H와 L로 분리할 수 없다.

EDI (Extended Destination Index)

EDI는 데이터의 조작 및 복사 작업 시, 목적지의 주소를 저장하는 레지스터이다.

DI: EDI의 하위 16비트

DI는 H와 L로 분리할 수 없다.

특수 목적 레지스터 (SPR, Special Purpose Register)

특수 목적 레지스터는 ALU가 아닌 명령 제어나 주소 변환 등 특정 기능 회로에 직접 연결되어 있는 레지스터로, 구조와 동작 방식이 범용 레지스터와 달라 일반적인 연산에는 사용할 수 없다.

Get Mangryang’s stories in your inbox

Join Medium for free to get updates from this writer.

x86 아키텍처에서 사용되는 특수 목적 레지스터는 다음과 같다.

EIP, EFLAGS, Segment, Debug, …

EIP (Extended Instruction Pointer)

EIP는 다음에 실행할 명령어의 주소를 저장하는 레지스터로, MIPS 등의 다른 아키텍처의 PC(프로그램 카운터)와 같은 역할을 수행한다.

EFLAGS (Extended FLAGS)

EFLAGS는 CPU의 동작을 제어하거나 연산 결과를 반영하는데 사용되는 레지스터로, EFLAGS의 특정 비트는 각각의 플래그 값을 나타낸다.

CF: EFLAGS 레지스터의 0번째 비트

PF: EFLAGS 레지스터의 2번째 비트

AF: EFLAGS 레지스터의 4번째 비트

ZF: EFLAGS 레지스터의 6번째 비트

SF: EFLAGS 레지스터의 7번째 비트

OF: EFLAGS 레지스터의 11번째 비트
  • CF (Carry Flag)
    연산 결과 올림(Carry)이나 빌림(Borrow)이 발생한 경우 Set(1)
  • PF (Parity Flag)
    연산 결과 하위 8비트가 짝수인 경우 Set(1)
  • AF (Auxiliary Flag)
    연산 결과 하위 4비트에서 올림이나 빌림이 발생한 경우 Set(1)
  • ZF (Zero Flag)
    연산 결과가 0인 경우 Set(1)
  • SF (Sign Flag)
    연산 결과 MSB(최상위 비트)가 1인 경우, 즉 연산 결과가 음수인 경우 Set(1)
  • OF (Overflow Flag)
    연산 결과 오버플로우가 발생한 경우 Set(1)

이렇게 연산의 상태를 나타내는 플래그를 상태 플래그라고 한다.

상태 플래그 이외에도 TF, IF, DF처럼 CPU의 동작을 제어하는 플래그도 EFLAGS 레지스터에 존재하는데, 이들을 제어 플래그라고 한다.

Segment Register

메모리는 특정 목적에 따라 프로그램 실행 시 각각의 영역으로 나뉘고, 이 영역을 세그먼트(Segment)라 한다.

세그먼트 레지스터는 이러한 각 세그먼트에 대한 기준 주소를 저장하는 데 사용되는 레지스터이다.

x86 아키텍처에서 사용되는 세그먼트 레지스터는 다음과 같다.

CS, DS, SS, ES, FS, GS

  • CS (Code Segment)
    코드(Code) 세그먼트 영역
    을 가리키는 세그먼트 레지스터이다.
  • DS (Data Segment)
    데이터(Data) 세그먼트 영역
    을 가리키는 세그먼트 레지스터이다.
  • SS (Stack Segment)
    스택(Stack) 세그먼트 영역
    을 가리키는 세그먼트 레지스터이다.
  • ES (Extra Segment)
    데이터 전송 및 문자열 처리 명령
    에서 목적지 주소를 지정하기 위해 사용되는 추가 세그먼트 레지스터이다.
  • FS (F Segment)
    보호 모드 및 롱 모드에서 주로 스레드 별 데이터나 특수 목적 데이터를 가리키는 추가 세그먼트 레지스터이다.
  • GS (G Segment)
    보호 모드 및 롱 모드에서 커널 데이터, CPU별 구조체, 또는 특수 목적 데이터를 가리키는 추가 세그먼트 레지스터이다.

--

--

Mangryang
Mangryang

망량의 게임 기술 블로그