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 에서 사용