레지스터(Register)
레지스터?
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) : 중단점 상태를 선택적으로 활성화