본문 바로가기

IT전공관련

x86 CPU 레지스터 조사

x86 CPU 레지스터 조사


1. 레지스터의 종류와 그 역할

먼저 종류가 그 목적에 따라 범용 레지스터, 

세그먼트 레지스터, 플래그 레지스터,인스트럭션 레지스터로 구성된다

범용 레지스터 : 논리 연산이나 수리 연산에 사용되는 

연산자 또는 주소를 계산하는데 사용되는 피연산자,

그리고 메모리 주소가 저장되는 레지스터 이다.

세그먼트 레지스터 : 코드 세그먼트, 데이터 세그먼트, 

스택 세그먼트를 가르키는 주소가 들어있는 레지스터 이다.

플래그 레지스터 : 프로그램의 현재 상태나 조건 등을 

검사하는 데 사용되는 플래그들이 있는 레지스터 이다.

인스트럭션 레지스터 : 다음 수행해야할 명령이 포함된

가상 메모리의 주소가 들어있는 레지스터 이다.


1-1 범용 레지스터

프로그래머가 임의로 조작할 수 있게 허용되어 있는

레지스터로 8개의 32bit 변수라고, 볼수있다.

이름: EAX

크기:32bit

설명: 누적 연산기, 각종 연사에 사용하며 연산시에

다른 레지스터보다 속도가 빠르다.

(누산기에 해당하며 대부분의 연산들이 수행)

1-2 

이름: ECX

크기:32bit

설명: 카운터, 전송이나 반복횟수를 세는 카운터.

(주로 반복문의 횟수에 사용된다.)

1-3

이름: EDX

크기:32bit

설명: 데이터, 일시적으로 데이터를 기억하며 EAX와 조합

하여 32비트 곱셈, 나눗셈을 하는 데 이용하기도 한다.

(누산기의 확장으로 )

1-4

이름: EBX

크기:32bit

설명: 베이스, 특정 메모리를 가르키는 포인터

(밑 부터는 포인터 레지스터)

1-5

이름: ESP

크기:32bit

설명: 스택의 가장 윗 부분을 가르킨다.

1-6

이름: EBP

크기:32bit

설명: 스택의 바닥을 가르킨다.

(밑 부터는 인덱스 레지스터)

1-7

이름 : ESI

크기 : 32bit

설명 : 복사 혹은 비교를 하는데 사용되는 Source문자열을 

나타낸다.

1-8

이름 : EDI

크기 : 32bit

설명 : 복사 혹은 비교를 하는데 사용되는 Destination문자열을 나타낸다.


2-1 세그먼트 레지스터
세그먼트 레지스터는 프로세스의 특정 세그먼트를 가르키는
포인터 역할을 한다.
CS 레지스터는 code 세그먼트를 가르키고,
DS, ES, FS, GS레지스터는 data 세그먼트를 가르키고,
SS레지스터는 stack 세그먼트를 가르킨다.

2. EIP란?
명령 포인터 레지스터이며 다음에 실행해야 할
명령어가 존재하는 메모리 주소가 저장된다.
현재 명령어를 실행 완료한 후에 
EIP레지스터에 저장되어 있는 주소에 위치한
명령어를 실행하게 된다. 실행 전 
EIP레지스터에는 다음 실행해야 할 명령어가 존재하는 주소의 값이 저장된다.
(한마디로 크기 32bit에 하는 일은 
현재 실행되는 명령 주소를 기억하는 일이다.)