y0u_bat
[64비트멀티코어OS] 3.2 레지스터 본문
레지스터 - 범용 레지스터, 세그먼트 레지스터, 컨트롤 레지스터 3가지
64비트 경우
범용 세그먼트 컨트롤
RAX CS CR0
RBX DS CR1
RCX ES CR2
RDX FS CR3
RSI GS CR4
RDI
RSP
RBP
R8~R15
AX - 산술 연산을 수해할때 누산기로 사용
BX - 데이터의 어드레스를 지정할때 데이터 포인터로 사용
CX - 반복문 또는 문자열의 카운터로 사용
DX - I/O 어드레스를 지정할때 사용하며, 산술연살을 수행할대보조 레지스터로 사용
세그먼트 레지스터 역할
CS - 코드영역 가르킴
- 데이터 이동명령으로 값변경 불가능, 점프명령이나 인터럽트 관련 명령으로 변겨가능
DS - 데이터 영역 가르킴
- 데이터 이동명령으로 값 변경 가능
- 데이터 영역에 접근할때 임시적으로 사용
ES - 문자열과 관련된 작업 처리 할때 임시적으로 사용됨
SS - 스택영역을 가르킴
- 데이터 이동명령으로 값 변경 가능
- 스택관련 레지스터를 통해 스택에 접근할때 임시적으로 사용
컨트롤 레지스터 - 운영모드 변경하고 현재운영모드의 특정기능 제어하는 레지스터
x86 - CR0 CR1 CR2 CR3 CR4
x64 - CR0 CR1 CR2 CR3 CR4 CR8
CR0 - 운영모드 제어
- 리얼모드에서 보호모드 전환하는 역할과 캐시, 페이지기능 등 활성
CR1 - 프로세스에 의해 예약된 레지스터
CR2 - 페이지 폴트 발생시, 발생한 선형주소가 저장되는 레지스터
- 페이징 기법을 활성화한 후에는 페이지 폴트 발생시 유효한 값을 가짐
CR3 - 페이지 디렉터리의 물리주소와 캐시에 관련된 기능을 설정하는 레지스터
CR4 - 프로세스에 지원하는 각종 확장기능 제어 레지스터
- 페이지 크기 확장이나 메모리 영역 확장 등의 기능을 활성화시킴
CR8 - 태스크 우선순위 레지스터의 값을 제어하는 레지스터
- 프로세스 외부에서 발생하는 인터럽터를 걸러주는 역할, IA32에서만 접근가능
'OS' 카테고리의 다른 글
[64비트멀티코어] 부트로더 제작 (2) (0) | 2016.04.12 |
---|---|
[64비트멀티코어] 부트로더 제작 (1) (0) | 2016.04.10 |
[64비트멀티코어OS] 3.3 운영모드와 메모리 관리기법 (0) | 2016.02.22 |