출처 : http://blog.naver.com/coofair/40055689793

 

기본적인 프로그램 실행 레지스터

 

8개의 범용레지스터

6개의 세그먼트 레지스터

프로세서의 상태플래그(EFLAGS)와 명령어 포인터(EIP)를 가지고 있는 레지스터 하나

 

 

 

 

범용레지스터 [General Purose Register]

각 레지스터는 하나의 32비트 값으로 혹은 16비트 값으로 처리될 수 있다.

몇 개의 16비트 레지스터는 두 개의 8비트 값으로 분리해서 처리 할 수 있다.

EAX 레지스터는 32비트이고 하위 16비트는 AX 이며 AX의 상위 8비트는 AH 그리고 하위 8비트는 AL이다

 

32비트

16비트

8비트(상위)

8비트(하위)

EAX

AX

AH

AL

EBX

BX

BH

BL

ECX

CX

CH

CL

EDX

DX

DH

DL

 

나머지 범용 16비트에 새로운 이름이 있으나 더 이상 나뉘지는 않는다. 여기서 보여주는 16비트 레지스터는

실제 주소 모드로 수행되는 프로그램 작성 시 보통 사용된다.

 

32비트

16비트

ESI

SI

EDI

DI

EBP

BP

ESP

SP

 

·EAX는 곱셈과 나눗셈 명령에서 자동으로 사용된다.

  종종 확장된 누산기(extended accumulatoe) 레지스터라고 부른다.

·CPU는 루프 카운터로 ECX를 사용한다.

·ESP는 스택영역에 있는 데이터를 가리킨다. 이 레지스터는 일반적인 계산이나 데이터 이동을 위해 절대로 사용될 수 없다.

  이것은 종종 확장 스택 포인터(extended stack pointer)라고 한다.

·ESI와 EDI는 고속의 메모리 전송명령에 사용된다. 이들은 때때로 확장 소스 인텍스(extended source index),확장 도착점 인덱스

  (extended destination index) 레지스터라고 한다.

·EBP는 고급 언어에서 스택 상에 있는 지역 변수와 함수 매개변수를 참조하기 위해 사용된다. 고수준의 프로그래밍이 아니면

  일반적인 계산이나 데이터 이동을 위해 사용해서는 안 된다. 종종 확장 프레임 포인터(extended frame pointer) 레지스터라고

  한다.

  

세그먼트 레지스터(segment register)

실제 모드에서 세그먼트(Segment)라고 하는 미리 할당된 메모리 영역의 시작주소를 가리킨다

프로그램 명령어를 갖고 있으며 다른것들은 변수(데이터)를 가지고 있고 스택 세그먼트 라고 하는 다른 세그먼트는 지역 함수 변수와 함수 매개변수를 가지고 있다.

 

명령어 포인터

EIP는 싱될 다음 명령어의 주소를 갖고 있다.

몇몇 기계어 명령어는 프로그램이 새로운 위치로 분기하게 하기 위하여 이 주소를 조작한다.

 

EFLAGS 레지스터 [또는 플래그(flag)]

CPU의 동작을 제어하기 위해서 또는 CPU의 동작의 결과를 반영하기 위한 개별적인 비트들로 구성된다.

프로세서 플래그를 조사하고 조작하기 위한 기계어 명령어들이 있다.

플래그는 그 값이 1 일때 set되며 0일때 clear 된다.

 

제어 플래그

CPU의 동작을 제어하기 위하여 프로그래머는 EFLAGS 레지스터의 각 비트를 지정한다.

그 예가 방향과 인터럽트 플래그이다

 

상태 플래그

CPU가 산술이나 논리 연산을 수행한 결과를 반영 한다.

플래그에는 오버플로,부호,제로,보조 캐리,패리티, 그리고 캐리 플래그 등이 있다.

 

캐리 플래그 (CF : carry flag)

부호 없는 산술연산의 결과가 너무 커서 저장될 수 없을 때 지정된다.

오버플로 플래그(OF : overflow flag)

부호가 있는 산술연산의 결과가 너무 커서 저장될 수 없을 때 지정된다.

부호 플래그(SF : sign flag)

산술연산이나 논리연산의 결과가 음수를 생성했을 때 지정된다.

제로 플래그(ZF : zero flag)

산술이나 논리연산의 결과가 0일 때 지정된다.

보조 캐리 플래그(auxiliart carry flag)

8비트 피연산자를 사용한 산술연산에서 비트 3에서 비트4로 캐리가 발생했을 때 지정된다.

패리티 플래그(parity flag)

하나의 수에서 지정된 비트의 개수를 합한 것으로 그 합이 홀수 인지 짝수인지를 나타낸다.

 

'Development > Assembly' 카테고리의 다른 글

범용레지스터 종류와 특징  (0) 2011.08.13
안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,