티스토리 뷰

보안

register 종류

NineKY 2008. 1. 14. 15:03

레지스터


레지스터
(영어: register, 순화 용어: 기록기)는 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소이다. 일반적으로 현재 계산을 수행중인 값을 저장하는데 사용된다. 대부분의 현대 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 그 내용을 다시 레지스터에서 메인 메모리로 저장하는 로드-스토어 설계를 사용하고 있다.

레지스터는 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리이다. 최신 프로세서에서 레지스터는 대개 레지스터 파일로 구현되지만, 과거에는 플립플롭, 마그네틱 코어, 박막 필름 메모리 등으로 구현되기도 했다.

컴퓨터내에 메모리 장치와 달리 CPU내의 임시 저장장소라고 생각을 하면 됩니다.

CPU내의 작업대라고하면 되는데 레지스터 종류는 참으로 많이 있습니다.

데이터 레지스터인 경우에 연산을 하기 전에 메모리로 부터 읽어온 데이터를 저장하거나, 연산 중간 중간 값을 메모리에 넣어 두었다가 빼오면 속도가 느리기 때문에 잠시 저장을 하는 역활을 합니다. 모든 연산이 끝났다고 생각을 하면 메모리에 저장을 합니다.

 

레지스터가 하는 일은 ...

컴퓨터는 단 한 순간이라도 기억을 하지 못하면 데이터는 소실되고 맙니다.

예를 들어

사용자가 1+1=? 이라고 물어 봤을때 결과값이 2가 나와도 기억하지 못하면 출력할 수도 없겠지요.

그래서 그 임시 결과 값을 저장하는 것이 Accumulator(누산기)라는 레지스터에서 잠시 기억하고 있습니다. 그리고 그 결과를 출력하는 것이지요.

 

레지스터를 사용하는 이유는 컴퓨터의 연산속도에 있습니다.

당연히 연산이 빠르면 컴퓨터가 빠르다고 할 수가 있겠지요.

컴퓨터 내부에서 가장 빠른 기억 장치가 바로 레지스터입니다.

cpu안에 포함되어 있다보니 여타 기억장치보다 빠릅니다.

그 다음이 우리가 흔히 부르는 ROM, RAM(메모리)가 빠릅니다.

그러니 연산결과를 메모리에 기억시키는 것보다 레지스터에 기억시키는 것이 당연히 연산속도가 빨라 질수가 있겠지요.

 

레지스터의 종류는 여러개가 있습니다.  대략

*제어장치 레지스터-PC,IR,MAR,MBR,디코더,엔코더

*연산장치 레지스터-누산기,보수기,상태레지스터...

여러개가 있습니다만 질문의 취지와 다른 것 같아 설명은 생략하겠습니다.

 

★ 결과적으로

레지스터는 CPU(중앙처리장치)내에 존재하는 기억장치로 우리 눈에는 보이지 않죠.

하는 일은 보통 연산후 결과를 임시적으로 기억하고, 속도 향상을 위하여 사용하며, 플립플롭으로 구성되어 있습니다.

플립플롭은 자료의 가장 최소 단위인 1BIT 상태를 기억하는 소자로 여러개의 플립플롭이 구성되어 레지스터가 형성 되어집니다.

 

종류

프로그램 카운터 라는 레지스터 è 현재 실행하고 있는 명령 뒤에 실행할 명령어의 주소를 저장하는 레지스터 이기도 합니다.

주소 레지스터  è  메모리 주소를 저장하여 메모리 접근에 사용되는 레지스터. 어떤 프로세서에서는, 주소를 저장하는 것이 아니라 조작하기 위한 목적으로 색인 레지스터를 사용하기도 한다.

범용 레지스터 è  데이터와 주소를 모두 저장할 수 있는 레지스터.

부동 소수점 레지스터 è  많은 시스템에서 부동소수점 값을 저장하기 위해 사용된다.

상수 레지스터 è  0이나 1 등 고정된 값을 저장하고 있는 레지스터.

특수 레지스터 è 프로그램의 상태를 저장한다. 프로그램 카운터, 스택 포인터, 상태 레지스터 등이 있다.

명령 레지스터 è 현재 실행중인 명령어를 저장한다. 해독장치에서 어떤 명령을 할것인가 해독하는 동안 명령어를 저장하기도 하구요.

색인 레지스터 è 실행중에 피연산자의 주소를 계산하는 데 사용된다

 

레지스터의 구성

1. 데이터 레지스터 è 정수 값을 저장할 수 있는 레지스터 .

AX,BX,CX,DX의 네가지, 일반적인 연산과 자료이동에 많이 사용

(1) AX(Acucumlator)

 곱셈과 나눗셈, 입출력, 문자열 연산에 사용, 타 레지스터보다 속도가 빠르기 때문에 연산과 자료 이동드의 처리를 할 때 효율적으로 자료를 처리

 

(2) BX(Base)

 기억장소를 가리키는데 사용(주소의 간접 지정). 다른 범용 레지스터와 마찬가지로 자료 이동과 연산에 사용된다.

 

(3) CX(Count)

 반복 명령어나 문자열 명령어, 비트의 이동이나 회전 명령등에서 카운터로 사용. 자료이동에도 이용

 

(4) DX(Data)

 입출력 주소 지정에 사용, 곱셈, 나눗셈 등에서 AX 레지스터와 함께 큰 수를 표현하는등의 목적으로 사용되기도 함.

 

2. 포인터 레지스터 è  특정 주소를 가리키는 레지스터, 종류로는 SP, BP, IP가 있다.

(1) SP(Stack Pointer)

 맨 마지막에 스텍이 쌓아둔 자료의 위치값을 저장, 스텍에 자료를 저장하거나 꺼내오는 PUSH, POP에 의해 값이 증감된다.

 

(2) BP(Base Pointer)

 주소를 간접 지정하는데 사용된다. SS레지스터와 함께 쓰이는 경우가 많은데, 주소를 간접 지정할 때 BP레지스터의 값은 오프셋 주소를 가리키고 세그먼트 주소는 SS레지스터로 가리킨다.

 

(3) IP(Instrunction Pointer)

 수행할 다음 명령어가 저장되어 있는 주소를 가리킨다. IP레지스터는 오프셋 주소를 가리키며 세그먼트 주소는 CS레지스터가 가리킨다. IP레지스터는 프로그래머가 직접적으로 쓰거나 읽을수가 없고 수행되는 명령어들에 의해서 자동으로 값이 변결될뿐이다.

 

3. 인텍스 레지스터

베이스레지스터나, 인덱스레지스터는 데이터를 찾기 위하여 주소 옵셋값을 저장하기도 합니다.

SI,DI 두개가 존재, 메모리에 저장 되어있는 자료를 읽어 오거나 저장하기 위한 오프셋 주소로 사용

 

(1)SI(Source Index)

 BX나 BP레지스터처럼 주소의 간접 지정을 위해 사용된다. SI레지스터는 문자열 명령어를 사용할 때 읽어올 자료의 오프셋 주소를 가리킨다. 일반적으로 DS레지스터와함께 사용된다.

 

(2)DI(Destination Index)

 SI레지스터처럼 주소의 간접 지정을 위해 사용된다. DI레지스터는 문자열 명령어를 사용할 때 자료를 저장할 오프셋 주소를 가리킨다. ES레지스터와 함께 사용.

 

4. 세그먼트 레지스터

 16비트 레지스터로 지정가능한 범위를 너머가는 메모리를 사용하기 위해 프로그램이  사용하는 메모리 영역을 나눠놓고 그 영역을 세그먼트라 한다. 하나의 세그먼트의 크기는 64Kbytek.

 

(1) CS(Code Segment)

  현재 프로그램의 명령어 코드가 있는 세그먼트의 시작 위치를 가리킨다. IP와 함께  사용된다.

 

(2) DS(Data Segment)

  자료가 저장되어 있는 세그먼트의 시작위치를 가리킨다. DS레지스터로 가리키는 데이터 세그먼트 내부의 자료들은 BX, SI, DI등의 레지스터로 관리한다.

 

(3) SS(Stack Segment) è  스텍의 메모리 영역을 가리킨다. SP와 함께사용.

(4) ES(Extra Segment)

  필요에 따라 임의로 세그먼트를 설정하는 세그먼트이다. DS레지스터와 함께 문자열 명령어의 수행을 위해 사용되는 경우가 많다. 문자열 명령어를 사용할 때 ES레지스터는 자료를 저정할 세그먼트의 시작 주소를, DS레지스터는 읽어 올 자료의 세그먼트 시작 주소를 가리킨다.

 

5. 플래그 레지스터

  수행된 명령어의 결과와 CPU상태에 대한 정보를 저장하는 레지스터, LAHF, SAHF명령어등으로 그 내용을 변경하거나 CLC, CLD로 제한된 비트만을 조작할 수 있다.

 

(1) 캐리 플래그(CF)

 연산 이후 자리옴김을 표시, 덧셈은 자리올림(carry), 뺄셈에서는 자리빌림(borrow)이 일어날 수 있는데 이럴 경우에 캐리플래그를 1로 세트한다. 외에는 0으로 클리어.

 

(2) 패리티 플래그(PF)

 연산결과에서 1로 되어있는 비트의 수가 짝수이면 1로, 홀수이면 0으로 클리어 된다.

 

(3) 보조 캐리 플래그(AF)

 BCD(Binary Coded Decimal) 연산에서의 자리올림과 자리빌림이 있을시 1로 셋, 외에는 0으로 클리어

 

(4) 제로 플래그(ZF) è  연산 결과가 0이면 1로 세트, 0이 아니면 0으로 클리어 된다.

 

(5) 부호 플래그(SF) è

 부호가 이쑈는 자료의 연산에서 결과가 음수일 경우에 1로 셋, 외에는 0으로 클리어.

 

(6) 트랩 플래그(TF)

 프로그램을 한 명령어씩 단계적으로 수행할 수 있도록 해준다. 1로 세트되어있을시  프로그램의 수행 내용과 과정을 추적한다.

 

(7) 인터럽트 팰래그(IF)

 인터럽트를 제어하기 위한 플래그로 플래그의 값이 0으로 클리어되면 인터럽트가 걸릴 수 없도록 하고, 1로 세트되면 인터럽트가 걸리는 걸을 허락.

 

(8)방향 플래그(DF)

 문자열 명령어에서 SI레지스터와 DI레지스터의 값을 증가시킬 것인지 감소시킬것인지 결정한다. 방향 플래그가 0으로 클리어되어 있으면 SI와DI레지스터의 값을 증가시키고, 1로 세트되어 있으면 감소시킨다. CLD와 STD명령어로 조작 가능하다.

 

(9) 오버플로우 플래그(OF)

 연산 결과가 지정한 기억 장소의 표현 범위값을 넘었을 때 플래그를 1로 세트한다.

 그 외에는 0으로 클리어한다.

'보안' 카테고리의 다른 글

00 윈도우 DLL 분석 [펌 kkamagui.tistory.com]  (0) 2008.01.16
ReversingTest - Input Output  (0) 2008.01.14
Tutorial Crack! - TEST, XOR 기능  (4) 2008.01.14
Assembly 명령어 [펌 Newms Blog]  (1) 2008.01.14
Instruction Set  (0) 2008.01.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함