My Study/System

레지스터

 레지스터는 목적에 따라 범용 레지스터, 세그먼트 레지스터, 플래그 레지스터, 인스턱션 포인터로 4가지로 나눌 수 있다


 범용 레지스터는 논리 연산, 수리 연산에 사용되는 피연산자, 주소를 계산하는데 사용되는 피연산자, 그리고 메모리 포인터가 저장되는 레지스터다.

 세그먼트 레지스터는 Code Segment, Data Segment, Stack Segment 를 가리키는 주소가 들어있는 레지스터이다.

 플래그 레지스터는 프로그램의 현재 상태나 조건 등을 검사하는데 사용되는 플래그들이 있는 레지스터이다. 

 인스트럭션 포인터는 다음 수행해야하는 명령이 이쓴ㄴ 메모리 상의 주소가 들어 있는 레지스터이다.


 이 레지스터들을 하나씩 살펴보자. 




 먼저 범용 레지스터.


EAX(Extended Accumulator Register)

 - 연산 결과가 저장되는 레지스터이다. 그리고 함수의 리턴값이 저장된다.


EBX(Extended Base Register)

 - 데이터 세그먼트 안의 데이터를 가리키는 포인터이다. 말이 어려우니 간접 주소를 가리키고 있는 포인터이다. 라고 생각을 하자.


ECX(Extended Counter Register)

 - 반복 명령어 사용시 반복 카운터에 사용된다.


EDX(Extended Data Register)

 - EAX와 같이 연산에 사용되는 레지스터이다.


ESI(Extended Source Index)

 - 문자열 처리에서 시작 부분을 가리키는 레지스터이다.


EDI(Extened Destination Index)

 -  문자열 처리에서 목적지 부분을 가리키는 레지스터이다.


ESP(Extended Stack Pointer)

 - 스택 프레임의 끝 지점 주소가 저장되며, PUSH, POP 될 때마다 ESP 값이 4Byte 씩 변한다. 


EBP(Extended Base Pointer)

 - 스택 프레임의 시작 지점 주소가 저장된다. 스택 프레임이 소멸 되면 이전 스택 프레임을 가리키게 된다.





 두번째는 인스터럭션 포인터


EIP(Extended Instruction Pointer)

 - 다음에 실행해야 할 명령어의 메모리 주소를 가리킨다. 




 세번째는 세그먼트 레지스

 세그먼트 레지스터는 프로세스의 특정 세그먼트를 가리키는 역할을 한다.


CS Register (Code Segment Register)

 - Code Segment 를 가리키며 CS는 실행 가능한 명령어가 존재하는 세그머트의 오프셋이 저장된다.


DS Register (Data Segment Register)

 - Data Segment 를 가리키며 DS는 프로그램에서 사용되는 세그먼트들의 오프셋이 저장된다.

 

SS Register (Stack Segment Register)

 - Stack Segment 를 가리키며 SS는 스택이 존재하는 세그먼트의 오프셋이 저장된다.


ES Register (Extra segment Register)

 - 프로그래머가 선택적으로 사용하며, 확장할 때 사용하는 세그먼트이다.


FS Register, GS Register

 - 윈도우 9X, NT 에서 사용되었지만 지금은 대부분 사용하지 않는다고 하니... 이건 더 찾아 수정하겠습니다.






 마지막은 플래그 레지스터


 CF(Carry Flag)

 - 부호 없는 연산 결과가 용량보다 클 때 1로 설정이 된다.


 ZF(Zero Flag)

 - 연산 결과가 0일 때 1로 설정된다. 반대로 0이 아닐 때 0으로 해제 된다.


OF(Overflow Flag)

 - 부호 있는 연산 결과가 용량보다 클 때 1로 설정된다.


SF(Sign Flag)

 - 연산 결과가 음수가 되었을 때 1로 설정된다. 반대로 양수가 되었을 때 0으로 해제 된다.


DF(Direction Flag)

 - 문자열 처리에서 연속되는 문자열의 처리 방향에 따라 세트 된다.

'My Study > System' 카테고리의 다른 글

Memory : stack(스택)  (0) 2015.06.26
Calling Conventions(콜링 컨벤션)  (0) 2015.05.18
레지스터  (0) 2015.05.13
Handray  (0) 2015.03.25
Stack Corruption  (0) 2015.03.18
리틀 엔디안(Little Endian), 빅 엔디안 (Big Endian)  (1) 2015.03.14

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.