IT/정보

레지스터(Register)

게으른 CPU 2022. 12. 24. 20:10

레지스터?

 

CPU 내 연산에서 사용하는 자료를  보관하는 메모리로, 고속 연산과 컴푸터 프로그램 제어를 위해 사용한다. CPU의 주기억장치에서 레지스터로 데이터를 옮겨 처리한 후 그 내용을 다시 레지스터에서 주기억장치로 저장하는 구조로 설계되어 있다. 레지스터는 CPU와 운영체제에 따라 크기와 종류가 다양하다.

 


 

레지스터 종류

 

소프트웨어 레지스터

 

프로세스에서 사용하는 레지스터로 역활에 따라 범용, 제어, 세그먼트, 상태로 구분할 수 있다.

 

범용 레지스터

 

논리, 산술 연산에 사용되는 레지스터이다.

 

레지스터 설명
AX(Accumulator Register) 산술 연산
BX(Base Register) 데이터 포인터
CX(Counter Register) 이동 연산과 루프 카운트
DX(Data Register) 산술과 I/O 연산
SP(Stack Pointer Register) 스택의 최상위 포인터
BP(Base Pointer Register) 스택의 기준 포인터
SI(Soure Index Register) 메모리 스트림 연산 출발지 포인터
DI(Destination Index Register) 메모리 스트림 연산 목적지 포인터

 

명령 레지스터

 

명령어 주소를 계산하는데 사용하며, IP(Instruction Pointer Register)가 있다. 프로그램 코드에서 다음 수행할 명령어의 위치를 저장하고 있다.

 

세그먼트 레지스터

 

각 세그먼트의 위치를 나타내며, 물리 주소로 변환할 때 사용된다. 

 

레지스터 설명
SS(Stack Segment) 스택 세그먼트의 시작 주소
CS(Code Segment) 코드 세그먼트의 시작주소
DS(Data Segment) 데이터 세그먼트의 시작 주소
ES(Extra Segment)
FS(F Segment)
GS(G Segment)
추가 세그먼트를 가리키는 주소

 

플래그 레지스터

 

프로그램이 수행 되는 순간마다 프로그램의 수행 상태를 비트 단위로 저장하고, 연산 결과에서 캐리가 발생하는지, 짝수인지, 음수인지를 표현한다.

 

플래그 설명
CF(Carry Flag) 마지막 산술 연산이 레지스터 크기를 초과하여 비트를 빼거나 더할 때 발생
PF(PArity Flag) 최하위 비트가 '0'인 경우
AF(Adjust Flag) 산순 연산에서 BDC 숫자의 캐리가 발생할 경우
ZF(Zero Flag) 연산 결과가 '0'인 경우
SF(Sign Flag) 연산 결과가 음수인 경우
IF(Interrupion Flag) 인트럽트가 사용가능한 경우

 

하드웨어 레지스터

프로세스를 제어하기 위해 사용되는 레지스터리로 디버그, 제어 레지스터리로 구분된다

 

제어 레지스터

 

- CR0(paging) : PE(보호/리얼모드)와 PG(no paging/paging)을 제어

 

- CR2(PFLA, Page Fault Linear Address) : 페이징 오류 주소 저장

 

- CR3 : 페이지 DB 주소로 PG가 1일 때 선형 주소를 물리 주소로 변환할 때 사용

 

디버그 레지스터

 

- DR0 ~ DR3 : 4개의 Break Poing 주소

 

- DR6(Debug Status Register) : 디버그 상태를 발생시키며, 예외 처리를 보호하고 있을 때, 예외 처리 핸들러를 실행하기 전 활성화하고 반환화기전에 '0'으로 설정

 

- DR7(Debug Contorl Register) : 중단점 상태를 선택적으로 활성화