Embedded Programming/Assembly

80x86 Intel CPU의 레지스터

중동콜링 2013. 8. 27. 12:39

1. 범용 레지스터 (General Purpose Register)

  - EAX, EBX, ECX, EDX 

위의 레지스터 넷은 일반적인 값이나 주소를 저장할 수 있는 레지스터로, 모두 32비트 크기이며 ABC 순으로 이름이 정해져있다.

각 레지스터의 앞글자인 E는 Extended의 약자로, 80386 이후로 32비트 레지스터로 바뀌면서 앞에 E를 붙여주게 되었다.

이 범용 레지스터들은 위의 그림과 같이 32비트 크기의 EAX와 16비트의 AX, 8비트 크기의 AH, AL로 각각 접근 할 수 있다.

이 때문에 과거 80x86시리즈의 CPU와 호환이 되는 것이다.


2. 인덱스 레지스터

 - ESI, EDI

 SI와 DI는 각각 Source Index, Destination Index의 줄임말로, 문자열을 복사할 때 사용되는 레지스터다.

둘 다 목적지와 출발지의 주소를 저장하는 역할을 하므로 메모리 주소를 담기 위해 32비트 크기를 갖는다.


3. 스택 관련 레지스터

 - ESP, EBP

 ESP는 Stack Pointer 레지스터로 스택에서 데이터의 푸시와 팝이 이루어질 때 사용된다. 한 예로 함수 호출시 실행중이던 명령어의 주소를 보관하는 역할을 한다.

 EBP는 Base Pointer 레지스터로 현재 스택의 가장 바닥(base)를 가리키는 레지스터다. 인수가 포함된 함수 호출 시 쓰인다. 


4. 명령어 레지스터 (Instruction Register)

 - EIP

 EIP는 Instruction Pointer 레지스터로, 어셈블리어로 직접 사용할 수 없는 레지스터이다. 

 EIP는 실행할 명령어를 메모리로부터 CPU로 fetch 시킬때, 다음에 fetch해 올 명령어의 주소를 저장한다.


5. 플래그 레지스터 (상태 레지스터)

 - EFLAGS

 EFLAGS 레지스터는 명령어가 실행될 때의 결과를 각 비트의 플래그로 명령어의 실행 상태를 표시하는 레지스터이다. 

각 비트의 역할은 아래 그림과 같다.

이 중 자주 쓰이는 비트가 몇가지 있는데, 그 중 11번째 비트는 OF(Overflow Flag)로 연산시 오버플로우가 발생했을 때 1로 세트된다.

0번째 비트인 CF(Carry Flag)는 연산시 캐리가 발생했을 때 1로 세트된다.

7번째 비트 SF(Sign Flag)는 연산의 결과가 음수가 나왔을 때 1로 세트된다.

6번째 비트 ZF(Zero Flag)는 연산결과가 0이 되었을 때 1로 세트된다.

1번째 비트 PF(Parity Flag)는 짝 홀수 패러티를 나타낼때 쓰인다. 1이면 홀수, 0은 짝수를 나타낸다.