컴퓨터구조론(3) - Register

유사인간·2023년 4월 21일
0

레지스터란?

레지스터는 데이터 저장소인 디스크와는 다르게, CPU 내에 내장되어 있는 저장공간이다. CPU와 하드디스크가 물리적으로 떨어져 있는 노이만 구조 때문에 연산 도중 CPU가 하드디스크에서 데이터를 불러와야만 하는 소요시간이 걸리고, 당장 실행시켜야 할 데이터를 저장해놓을 수 있는 공간이 필요하다. 따라서 곳간의 쌀을 훔쳐와 집에 보관해놓고 밥을 짓듯이, 일시적 저장을 가능케하는 저장공간으로 기능한다.

운영체제가 제공하는 메모리의 공간

레지스터를 공부하기 전, 컴퓨터 운영체제의 메모리의 구조에 대해서 공부했다. 다음 이미지를 보자.

상단의 빨간색 코드 영역과 중간 하단의 힙 영역을 보자. 이들은 사용자가 관리하는 영역이다. 코드를 작성하여 실행할 프로그램의 코드를 컴퓨터가 가져다 쓰는 공간이 코드 영역, 사용자가 동적 할당, 예를 들어 가변 행렬 등을 관리하는 공간이다. 또한 초록색 데이터 영역은 프로그램의 전역/정적 변수가 저장되는 공간이다. 이것은 프로그램이 시작할 때 이 영역이 전역/정적 변수를 위해 데이터 공간이 할당되며, 프로그램이 종료되면 소멸한다. 사용자가 개입하는 부분은 이 3가지의 데이터 영역이다.

주황색 스택 영역은 사용자가 마음대로 수정할 수 없는 부분이다. 사용자가 특정 함수를 호출하면, 그 함수에서 사용하는 지역변수와 매개변수가 저장되는 영역이다. 이 함수가 실행되고 종료될때까지 존재하며, 함수의 호출이 완료되면 없어지는 영역이다. 이 스택 영역의 동작 기작은 맨 먼저 저장된 데이터가 가장 빠른 탈출 우선권을 가진다.

레지스터의 종류

  1. 범용 레지스터(General-Purpose register)
  2. 세그먼트 레지스터(segment register)
  3. 포인트 레지스터(point register)
  4. 플래그 레지스터(Program status and control register)
  5. 인덱스 레지스터(Index register)
  6. 인스트럭션 포인터(instruction pointer)

 

범용 레지스터

논리 연산과 수리 연산, 주소 계산의 포인터, 메모리 포인터가 저장되는 레지스터이다. 사용자가 실제로 조작할 수 있는 공간이다.

레지스터 종류목적
EAX피연산자와 연산 결과의 저장소
EBXDS 내부의 데이터를 가리키는 포인터
ECXI/O포인터
ESIDS가 가리키는 DS 내부 데이터를 가리키는 포인터 - 시작점을 가리킴
EDIDS가 가리키는 DS 내부 데이터를 가리키는 포인터 - 완료점을 가리킴
ESPSS가 가리키는 맨 꼭대기를 가리키는 포인터
EBPSS가 가리키는 스택의 내부 상 하나를 가리키는 포인터

* I/O는 inpout/output의 약자이며, 컴퓨터 및 주변장치에 대해 데이터를 전송하는 프로그램이다.

세그멘트 레지스터

세그먼트와 그 세그먼트를 가리키는 포인터는 다른 개념이므로 혼동하지 않도록 주의하는 것이 좋다. 레지스터가 가리키는 위치를 바탕으로 하여 세그먼트 내부의 명령어들을 정확하게 호출할 수 있다.

세그먼트 종류포함된 것들
Code Segment명령어
Data Segment변수
Stack Segment함수
Extra Segment사용자가 임의로 사용가능한 영역
FS,GS이전의 32bit 운영체제에서의 잉여영역

포인트 레지스터

레지스터 종류목적
EBP(베이스 포인터)스택 내부 변수의 값을 읽는데 사용
ESP(스택 포인터)스택의 가장 끝 주소를 가리킴
EIP(명령어 포인터)다음 명령어의 오프셋을 저장하며, CS 레지스터와 합쳐저 다음에 수행될 명령의 주소 형성

플래그 레지스터

프로그램의 현재 상태와 조건을 검사하는 레지스터. 각종 자료형들의 일정한 조건이 달성되었을 시, 이 플래그 레지스터가 특정 값으로 변화하면서 정보를 알리는 역할을 한다.

인덱스 레지스터

EDI : 목적지 주소에 대한 값 저장, ESI 출발지 주소에 대한 값 저장을 수행하는 레지스터이다.

인스트럭션 포인터

이 다음번에 수행할 명령이 있는 메모리 주소가 있는 레지스터. 소프트웨어를 통해 바로 조작할 수 없지만 미리 작성한 프로그램을 특정 크기로 나누어 저장한 프로시저 스택의 포인터를 저장하며, 미리 프로그램의 값을 수정함으로서 레지스터의 값만을 간접적으로 지정할 수 있다.

profile
유사 인간에 주의하세요.

0개의 댓글