카테고리 없음

2. 운영모드와 레지스터

운영모드는 크게 16비트모드, 32비트모드, 64비트모드 세 가지로 나눌수있다.

숫자가 커질수록 레지스터 개수도 많아진다.

OS를 개발하는 과정에서 큰 비중을 차지하는 레지스터는

1.  범용 레지스터

2.  세그먼트 레지스터

3.  컨트롤 레지스터

세가지가 되겠다.

레지스터란?  레지스터는 프로세스 내부에 있는 작은 공간이며 연산,제어,상태표시,디버깅 등의 목적으로 사용한다.


범용 레지스터는 계산, 메모리 어드레스 지정, 임시저장공간 등의 목적으로 사용한다

x86-64 프로세서의 범용 레지스터

AX :  산술 연산을 수행할때 누산기로 사용한다

BX :  데이터의 어드레스를 지정할때 데이터 포인터로 사용

CX :  루프 또는 문자열의 카운터로 사용

DX:  I/O 관련 어드레스를 지정할때 사용, 산술연산을 수행할때 보조 레지스터로 사용

SI :  문자열에 관련된 작업을 수행할때 원본 문자열의 인덱스로 사용

DI :  문자열에 관련된 작업을 수핼할때 목적지 문자열의 인덱스로 사용

SP:  스택의 포인터로 사용

BP:  스택의 데이터에 접근할때 데이터의 포인터로 사용

R8 ~ R15:   x86-64 프로세서에서 추가된 범용 레지스터로 다양한 용도로 사용가능 

//  16비트일때 접두사 X   32비트일때 E  64비트일때 R이 붙음

x86-64 프로세서의 세그먼트 레지스터

세그먼트 레지스터는 주소 공간을 목적에 따라 구분함.

 세그먼트 레지스터의 주된 역할은 어드레스 영역의 구분이지만 모드마다 조금씩 다르다.

CX :              코드 영역을 가리키는 레지스터,  데이터 이동명령으로 값을 변경X  점프명령이나 인터럽트 관련 명령으로                     변경가능

DS, ES, FS:     데이터 영역을 가리키는 레지스터, 데이터 이동명령으로 값 변경 O, DS레지스터는 데이터 영역에 접근할                       때 사용됨, ES레지스터는 문자열과 관련된 작업을 처리할때 사용됨

SS:              스택 영역을 가리키는 레지스터, 데이터 이동명령으로 값 변경 O, 스택 관련 레지스터(SP,BP)를 통해 스택에                   접근할때 사용


x86-64 프로세서의 컨트롤 레지스터


컨트롤 레지스터는 운영모드를 변경하고 현재 운영중인 모드의 특정기능을 제어함.

CR0:   운영모드를 제어하는 레지스터, 리얼모드에서 보호모드로 전환하는 역할과 캐시, 페이징기능등을 활성화.

CR1:   프로세서에 의해 예약된 레지스터

CR2:   페이지 폴트 발생시 페이지폴트가 발생한 선형주소가 저장되는 레지스터,

CR3:   페이지 다렉토리의 물리 주소와 페이지 캐시에 관련된 기능 설정

CR4:   각종 확장 기능 지원

CR8:   IA-32e 모드에서만 접근가능