본문 바로가기

Computer/0x02 운영체제

x86 프로세서의 구조 - 5화

x86 프로세서의 구조 - 5화




4편에서는 범용레지스터에 대해서 공부해 보았습니다. 

이번 5편에서는 세그먼트 레지스터에 대해서 배워 보도록 하겠습니다.





세그먼트 레지스터


세그먼트 레지스터: segment의 시작(base)주소 지정에 사용됨



* 세그먼트 (Segment )

: 데이터 또는 코드용으로 할당된 메모리 영역 입니다.


* 세그먼트의 크기 

- 8086,80286은 최대 64KB(2의 16승) - 16비트 offset 주소

- 80386이상은 최대 4GB (2의 32승) - 32비트 offset 주소 




세그먼트 종류



* segment 종류 

- code segment : 프로그램 코드를 포함

- data segment : 프로그램에서 정의된 데이터,상수 등을 포함

- stack segment : 지역변수, 매개변수, 함수의 복귀주소 등을 포함



* segment registers - 각 세그먼트의 시작주소 정보를 보관 

 - CS :     code segment

 - DS , ES (FS,GS) : data segment 

 - SS : stack segment 



* segment offset

 - segment 시작주소에 상대적인 주소

 - 8086 / 286 : 16비트 , 386이상 : 32비트



* 메모리 주소 = 세그먼트 시작주소 + 오프셋 주소

 - 세그먼트 시작주소 지정 방법은 동작 모드에 따라서 차이가 있음



 

명령어 포인터


* 명령어 포인터 (Instruction Pointer)
: 실행할 다음 명령어의 offset 주소를 저장

* EIP (32비트)
: 80386 이상의 보호모드에서 사용

* IP (16비트)
: 8086 , 80286 
: 80386 이상의 real mode 에서 사용