컴퓨터 구조 - 레지스터 이해하기

Bigmountain·2021년 4월 28일
0

레지스터의 실체

레지스터가 디자인되는데 결정해야할 중요요소 3가지

1. 레지스터를 몇 비트로 구성할 것인가?
2. 몇 개 정도로 레지스터를 구성할 것인가?
3. 레지스터 각각을 무슨 용도로 사용할 것인가?

ex) 예제는, 이해를 위한 가정일 뿐 실제 구성이 그렇다는 의미는 아님.

1. 64bit로 구성하겠다.

  • 그렇다면 주소값을 표현할 수 있는 개수는 최대 2^64이다.
    • 즉, 주소 값 하나는 64bit로 표현한다.(8byte)

2. r0 ~ r15 까지의 레지스터를 구성하겠다.

  • 그렇다면 CPU에는 64bit크기를 가지는 레지스터가 총16개가 존재한다.

3. 아래와 같이 r1 ~ r8레지스터에는 각각의 용도를 지정. r9 ~ r15는 부족할 때 쓰겠다.

r1: AX (Accumulator register). 산술 연산에 사용.
r2: CX (Counter register). 시프트/회전 연산과 루프에서 사용.
r3: DX (Data register). 산술 연산과 I/O 명령에서 사용.
r4: BX (Base register). 데이터의 주소를 가리키는 포인터로 사용. (세그멘티드 모드에서는 세그멘트 레지스터 DS로 존재)
r5: SP (Stack Pointer register). 스택의 최상단을 가리키는 포인터로 사용.
r6: BP (Stack Base Pointer register). 스택의 베이스를 가리키는 포인터로 사용.
r7: SI (Source Index register). 스트림 명령에서 소스를 가리키는 포인터로 사용.
r8: DI (Destination Index register). 스트림 명령에서 도착점을 가리키는 포인터로 사용.
r9 ~ r15: 미 지정

레지스터와 명령어는 연관이 있을까 ??

  • 있다.
  • 레지스터에 명령어가 이진수로 저장된다. CPU의 ALU라는 연산장치는 이 명령어를 읽어서, 정해진 규약에 맞추어 해석하게 된다.
  • 레지스터 구성이 몇bit냐에 따라, ALU가 해석하는 방법이다르다. 또한 동일한 bit수를 가지더라도 명령어를 어떻게 구성하느냐에 따라 다르기도 하다.
    • 그리고, 명령어를 저장하는 레지스터는 따로 있다.(IR)
  • 만약 64bit공간에서 명령어 구성이 대충 아래처럼 되있다고 한다면 ?
    0~15는 명령어, 16~31은 저장소, 31~46은 피연산자1, 47~62는 피연산자2
    • 피연산자2에는, 데이터가 저장되어있는 메모리주소가 담긴다고하면..
    • 여기서 문제가 발생한다.
    • 문제는 명령어를 구성할 때 주소표현을 15bit로밖에 못한다는 것.
    • 그렇다는 것은 메모리 접근이 주소표현이 가능한 2^15bit로 줄어든다는 뜻이 된다. => 해결책이 indirect모드.

indirect모드란 ?

  • 바로 위에 글 같이 명령어는 연산자, 명령어, 저장소등을 표현하기 때문에 메모리 주소를 나타내는 범위가 줄어들게 된다. 문제를 indirect모드로 해결할 수 있다.
    => 걍, 레지스터에 있는 RAM의 주소로 접근했을 때, Data값이 있는게 아니고, RAM의 다른주소를 가지고 있는거다. 그러면 한번 우회해서 더 넓은 범위의 주소에도 접근 가능하니깐.

0개의 댓글