출처 : http://blog.naver.com/source_jy/50085125989

 

1. EAX(Extended Accumulator X)

a. 누산기인 EAX 레지스터는 입출력과 거의 모든 산술연산에 사용된다.

b. 곱셈과 나눗셈, 변환 명령어 등은 반드시 EAX 레지스터를 필요하게 된다.

c. EAX 레지스터는 32bit 레지스터이고 16bit 레지스터로 ax 가 있다.

d. 누산기로 불리며, 메모리 산술 연산 결과가 저장되는 레지스터

e. 함수 리턴값에 사용

f. Win32 API 함수들은 모두 리턴값을 EAX에 저장한 후 리턴

 

2. EBX(Extended Base X)

a. 주소 지정을 확장하기 위해 인덱스로 사용되는 레지스터

 

3. ECX(Extended Counter X)

a. ECX는 루프의 반복 횟수나 좌우방향의 시프트 비트 수를 기억한다. 그 외에 계산에도 사용된다.

b. ECX는 32bit 레지스터이고 16bit로는 cx가 있다.

c. 카운터로 루프가 반복되는 횟수를 제어하는데 사용되는 레지스터

d. 반복문 명령어에서 참조 카운트로 사용

e. 루프 돌 때 마다 ECX를 1씩 감소

 

4. EDX(Extended Data X)

a. EDX 몇몇 입출력 동작에서 사용된다.

b. 입출력 연산에서 사용되는 데이터 레지스터

 

5. ESP(Extended Stack Pointer)

a. Intel 80386 이상의 마이크로프로세서에는 스택 최상위 주소를 저장하는 스택 포인터라는 ESP레지스터가 있다.

b. ESP 레지스터는 최상위 주소를 저장한다.

c. 프로그램 안에서 수시로 변경된다.

d. 스택에 저장된 변수, 파라메테에 접근 하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 힘들고, CPU가 정확한 위치를 참고할 때 어려움이 있다.

e. 스택의 맨 윗 부분을 가리킬 때 사용되는 레지스터

f. 스택 메모리의 역할

ㄱ. 함수 내의 로컬변수 임시저장

ㄴ. 함수 호출 시 파라메터 전달

ㄷ. 복귀 주소(return address)를 저장

g. 스택 메모리 주의점

ㄱ. 32/64bit 컴퓨팅 환경에서 스택 크기는 각각 32/64(4/8 byte) 이다.

ㄴ. 스택은 아래로 자란다.

ㄷ. 스택에 값을 입력하면 (PUSH) 스택 포인터는 4byte 만큼 줄어듬

ㄹ. 스택에서 값을 가져오면 (POP) 스택 포인터는 4byte 만큼 늘어남

ㅁ. PUSH, POP, CALL, RET로 ESP를 직접 조작

 

6. EBP(Extended Base Pointer)

a. 함수 인자와 지역 변수를 가리킬 때 사용되는 레지스터

b. 함수가 호출 되었을 때 그 순간의 ESP를 저장하고 있다가, 함수가 리턴하기 직전에 다시 ESP값을 되돌려 줘서 스택이 깨지지 않도록 함(stack frame 기법)

 

7. ESI 와 EDI는 특정 명령어(LODS, STOS, REP, MOVS, etc)와 함께 주로 메모리 복사에 사용

 

8. EIP(Extended Instruction Pointer)

a. CPU가 처리할 명령어의 주소를 나타내는 레지스터이며, 크기는 32bit(4byte) 입니다.

b. 명령어 포인터 EIP 레지스터는 현재 코드 세그먼트에서 다음에 실행될 명령의 offset을 저장

c. EIP는 코드 라인에서 한 경계로 JMP, JCC, CALL, RET, IRET 명령을 실행할 때 명령어 수 만큼 앞 뒤로 이동

d. EIP 레지스터는 소프트웨어에서 직접적으로 액세스 될 수 없다.

e. 이는 흐름제어 명령, 인터럽트, 예외 등을 통하여 암시적으로 제어 된다.

f. EIP 레지스터를 읽는 유일한 방법은 CALL 명령을 실행하여 프로시져 스택의 리턴 명령어 포인터 값을 읽는 것이다.

g. EIP 레지스터는 프로시저 스택에서 리턴 명령어 포인터 값을 수정하고 리턴 명령(RET/IRET)을 수행하여 간접적으로 로드 될 수 있다.

h. CPU는 하나의 명령을 처리하고 난 후 자동으로 그 명령어 길이 만큼 EIP를 증가 시킵니다.

u. General Purpose Register 들과는 다르게 EIP는 그 값을 직접 변경할 수 없도록 되어 있습니다.

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,