IT/C_C++_Assembly2011. 12. 20. 18:10

  

이번글에서는 레지스터의 종류와 스택에 대해서 알아보도록 하겠습니다.

레지스터는 CPU내부의 대표적인 저장장치입니다. 레지스터는 CPU의 설계에 따라,또는 사용하는 용도와 목적에 따라 종류가 다양합니다. 이외에 스택이라는 저장장치가 있는데 일반적인 저장장치와 다르게 주소를 지정하는 방법과 읽고 쓰는 방법이 간단하다는 특징이 있습니다.

 
[표] 레지스터의 이름과 종류 

  

약 어

 

Accumulator(어큐뮬레이터)

Base Register(베이스 레지스터)

Count Register(카운트 레지스터)

Data Register(데이터 레지스터)

Base Pointer(베이스 포인터)

Instruction Pointer(인스트럭션 포인터)

Stack Pointer(스택 포인터)

Destination index

Source Index(소스 인덱스)

Data Segment Register(데이터 세그먼트 레지스터)

Extra Segment Register(엑스트라 세그먼트 레지스터)

Stack Segment Register(스택 세그먼트 레지스터)

Code Segment Register(코드 세그먼트 레지스터)

Flags Register(플래그 레지스터)

EAX

EBX

ECX

EDX

EBP

EIP

ESP

EDI

ESI

DS

ES

SS

CS

none

범용 레지스터

범용 레지스터

범용 레지스터

범용 레지스터

오프셋 레지스터

오프셋 레지스터

오프셋 레지스터

오프셋 레지스터

오프셋 레지스터

세그먼트 레지스터

세그먼트 레지스터

세그먼트 레지스터

세그먼트 레지스터

none

 

. EAX연산 결과를 저장하는 용도로 사용될 뿐만 아니라 데이터의 이동과 데이터의 일시적 저장 등 범용 레지스터의 기능을 담당.

. EBX데이터의 이동, 일시적 저장 등 범용 레지스터의 기능을 갖는다. 또한 간접 번지 지정에 사용. 베이스를 지정해 주는 레지스터

. ECX데이터의 이동, 일시적 저장 등 범용 레지스터의 기능을 갖는다. 반복적인 데이터의 연산, 논리 명령 등에 많이 사용.

. EDX데이터의 이동, 일시적 저장 등 범용 레지스터의 기능을 갖는다. 곱셈과 나눗셈에서 AX 레지스터의 범위를 초과할 경우에 많이 사용.

. ESI소스 색인을 위한 레지스터.

. EDI – ES(엑스트라 세그먼트 레지스터)와 조합을 이루어 사용되고 그 외에 연산에도 활용이 가능합니다. EDI역시 ESI와 같이 간접 주소 지정 방식에 많이 사용.

. EIP명령 포인터(Instruction Pointer)의 약자로서, 이 레지스터는 실행할 다음 명령의 번지를 가르키는데 사용됩니다.

. EBP레지스터는 스택에서 데이터를 다루기 위해 사용되는 레지스터. EBP레지스터는 스택 내에서 상대 주소 값(변위 또는 오프셋)을 저장하는데 많이 사용됩니다.

. ESP – SP(Stack Pointer) 스택 내의 포인터를 설정하기 위한 레지스터.

. 플래그 레지스터 플래그란 컴퓨터에서의 연산결과에 대한 정보를 얻기 위해서 마련한 표시판입니다. 플래그 레지스터에는 처리 결과(상태)에 대한 16가지 정보를 표시하는 비트가 있습니다. 즉 플래그 레지스터는 2바이트의 레지스터로 각 비트는 해당 연산 결과에 대한 정보 또는 상태를 보여줍니다.

 

그리고 스택에 대해 알아볼까요?

스택(Stack) CPU내부의 레지스터 집합에 존재하는 저장장치입니다. 레지스터와는 다른 특징이 있습니다. 우선 데이터가 순차적으로 저장되며, 요소의 개수와 스택의 길이는 가변적입니다. 그리고 한번에 하나의 요소에만 액세스가 가능합니다. 결과적으로 데이터 접근 방법은 나중 입력 먼저 출력(LIFO)의 특징을 갖습니다.

 

PUSH & POP

스택의 동작에서 데이터가 입력되고 출력되는 부분을 스택의 TOP이라고 합니다.

PUSH : 스택의 TOP에 새로운 요소를 추가 저장하는 동작을 PUSH라고 합니다.

POP  : 스택의 TOP에서 하나의 요소를 꺼내는 동작을 POP이라고 합니다.

Posted by 예영교육연구소