IA 32(x86) CPU는 크게 5종류의 레지스터가 있습니다.

범용 레지스터, 인덱스 레지스터, 포인터 레지스터, 부동 소수점 레지스터, 플래그 레지스터가 그것이며 각각 사용용도가 모두 다릅니다.

레지스터들 앞에 붙어있는 E는 Extended의 약자로서 현재 사용되는 x86 architecture는 80386에서 점차 발전해 나갔습니다.

그래서 현재 많이 사용되는 Pentium 이나 Core 2DUO 같은 프로세서들도 80386과 거의 비슷합니다. 물론 엄~~청 나게 발전 되었지만요. 

종류

이름

설명

범용

EAX

곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴값이 저장되는 용도로 사용된다.

EBX

ESI EDI 결합하여 인덱스에 사용된다.

ECX

반복 명령어 사용시 카운터로 사용된다. ECX 레지스터에 반복할 횟수를 지정해 놓고 반복 작업을 수행한다.

EDX

EAX 같이 쓰이며 부호 확장 명령 등에 쓰인다.

인덱스

ESI

데이터 복사나 조작시 Source Data 주소가 저장된다. ESI 레지스터가 가리키는 주소의 데이터를 EDI 레지스터가 가리키는 주소로 복사하는 용도로 많이 사용된다.

EDI

복사 작업시 Destination 주소가 저장된다. 주로 ESI 레지스터가 가리키는 주소의 데이터가 복사된다.

포인터

EIP

다음에 실행해야 명령어가 존재하는 메모리 주소가 저장된다. 현재 명령어를 실행 완료한 후에 EIP 레지스터에 저장되어 있는 주소에 위치한 명령어를 실행하게 된다. 실행 EIP 레지스터는 다음 실행해야 명령어가 존재하는 주소의 값이 저장된다.

EBP

하나의 스택 프레임의 시작 지점 주소가 저장된다. 현재 사용되는 스택 프레임이 소멸되지 않는 동안 EBP 값은 변하지 않는다. 현재의 스택 프레임이 소멸되면 이전에 사용되던 스택

프레임을 가리키게 된다.

ESP

하나의 스택 프레임의 지점 주소가 저장된다. PUSH, POP 명령어에 따라서 ESP 값이 4byte 변한다.

부동

소수점

ST(0)

부동 소수 연산에 사용되는 레지스터

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

플래그

Eflag

OF

Overflow: 산술 연산 상위(가장 왼쪽) 비트의 overflow 나타냄

DF

Direction: 스트링(문자) 데이터를 이동시키거나 비교할 왼쪽 또는 오른쪽의 방향 결정

IF

Interrupt: 키보드 입력과 같은 외부 인터럽트가 처리되어야 하는지 또는 무시되어야 하는지를 나타낸다.

TF

Trap: 단일 단계 모드(single-step mode) 프로세서 연산을 허용한다. 디버거 프로그램은 TF 플래그를 설정해서, 사용자가 번에 하나씩 명령어를 실행시키고, 레지스터와 메모리 상에서 영향을 조사할 있게 한다.

SF

Sign: 산술 연산의 결과 값에 대한 부호를 나타낸다. (0=양수, 1=음수)

ZF

Zero: 산술이나 비교 연산의 결과를 나타낸다. (0= 결과 값이 0 아님, 1= 결과 값이 0)

AF

Auxiliary carry: 특수화된 산술에서 사용되며, 산술 연산에서 비트 3에서 비트 4로의 캐리를 포함한다.

PF

Parity: 연산 겨로가 1비트들의 개수를 나타낸다. 개수가 짝수인 경우 짝수 패리티(even parity) 부르며, 홀수인 경우 홀수 패리티(odd parity) 한다.

CF

Carry: 산술 연산 상위 비트의 캐리를 포함한다. 또한 비트 자리이동(shift) 또는 비트 회전(rotate) 연산 가장 마지막의 비트 내용을 포함한다.

  

'Programming > 이것저것' 카테고리의 다른 글

typeid 2  (1) 2010.05.25
세그먼트 레지스터  (0) 2010.05.01
어셈블리어 점프 명령어  (0) 2010.04.29
Symbol  (0) 2010.04.24
IL Code에 심볼 정보가 포함되는 이유  (0) 2010.04.24

+ Recent posts