하드웨어 구조 - 5
레지스터 - 1
사실 CPU를 설명할 때 설명해야 하는데 너무 분량이 많아질 것 같아서 별도의 페이지로 분리했다.
레지스터라는 것은 크게 두 가지 종류로 나눌 수 있다. 프로그램 실행을 위한 레지스터와 계산을 할 때 쓰는 레지스터와 모드나 설정을 바꾸는 등 시스템에 관련된 레지스터가 그것이다.
프로그램 실행을 위한 레지스터
프로그램 실행을 위한 레지스터에도 종류가 있다.
1. 범용 레지스터
앞에 붙는 접두사로 몇 Bit에서 작동하는 레지스터인지 구분을 한다.
32Bit는 E, 64Bit는 R이다.
1) AX
- 산술 연산을 수행할 때 사용함
- 시스템 함수의 반환값을 받을 때 DX와 함께 사용하기도함
2) BX
- 데이터의 어드레스를 지정할 때 데이터 포인터로 사용
3) CX
- 루프를 돌릴때 카운터로 사용
4) DX
- I/O 어드레스를 지정할 때 사용
- 산술 연산을 수행할 때 보조 레지스터로 사용
- 시스템 함수의 반환값을 받을 때 AX와 함께 사용하기도함
5) SI
- 문자열에 관련된 작업을 수행할 때 원본 문자열의 인덱스로 사용
6) DI
- 문자열에 관련된 작업을 수행할 때 목적지 문자열의 인덱스로 사용
7) SP
- 스택의 포인터로 사용된다.
- 스택의 가장 나중에 들어간 데이터를 가르킨다.
- 데이터가 추가되면 데이터 사이즈 만큼 스택 주소가 낮은 주소로 이동한다.
8) BP
- 스택 데이터에 접근 할때 데이터의 포인터로 사용한다.
- 스택의 가장 최하단을 나타낸다.
9) R8~R15
- x86의 64bit 프로세서의 추가된 범용 레지스터이다.
2. 인스트럭션 포인터 레지스터 (IP)
- 현재 수행 중인 명령의 어드레스를 가리키는 레지스터이다.
3. 16bit 세그먼트 레지스터
- 어드레스 영역을 다양한 크기로 구분하는 역할을 하는 레지스터이다.
1) CS
- 코드 영역을 가리키는 레지스터로 데이터 이동 명령으로 값을 변경할수 없으니 점프 명령이나 인터럽트 명령으로 값을 변경할 수 있다.
2) DS
- 데이터 영역을 가리키는 레지스터이다.
- CS와는 달리 데이터 이동 명령으로 값을 변경할 수 있음
- 데이터 영역에 접근할 때 임시적으로 사용되는 레지스터이다.
3) ES
- 데이터 영역을 가리키는 레지스터이다.
- CS와는 달리 데이터 이동 명령으로 값을 변경할 수 있음
- 문자열과 관련 된 작업을 처리할때 임시적으로 사용하는 레지스터이다.
4) FS
- 데이터 영역을 가리키는 레지스터이다.
- CS와는 달리 데이터 이동 명령으로 값을 변경할 수 있음
5) GS
- 데이터 영역을 가리키는 레지스터이다.
- CS와는 달리 데이터 이동 명령으로 값을 변경할 수 있음
6) SS
- 스택 영역을 가리키는 레지스터
- 데이터 이동 명령으로 값을 변경할 수 있다.
- SP 레지스터와 함께 사용하여 데이터의 현재 위치나 프로그램 스택내에서 주소를 참조한다.
참고 문헌
- 64Bit 멀티코어 OS의 구조 - 한승훈 저
This post is licensed under CC BY 4.0 by the author.