Post

하드웨어 구조 - 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 레지스터와 함께 사용하여 데이터의 현재 위치나 프로그램 스택내에서 주소를 참조한다.

참고 문헌

  1. 64Bit 멀티코어 OS의 구조 - 한승훈 저
This post is licensed under CC BY 4.0 by the author.