1. 레지스터


1) 개요

레지스터는 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억장소이다.

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


2) 레지스터 종류

레지스터는 사용 용도에 따라 나뉜다.


범주

이름

용도

범용 

레지스터

EAX(Accmulator)

산술연산(함수의 결과값 저장)

EBX(Base Register)

특정 주소 저장

ECX(Count)

반복적 실행되는 특정 명령

EDX(Data)

일반 자료 저장

포인터 

레지스터

EBP(Base Pointer)

스택 내 가장 밑의 주소

ESP(Stack Pointer)

스택 내 가장 위의 주소

EIP(Instruction Pointer)

다음 실행할 명령의 주소

플래그 

레지스터

EFLAGS

연산 결과 및 시스템 상태와 관련된 플래그 값


위의 표는 컴파일러가 컴파일 할 때 주로 사용되는 것이다. 반드시 위의 용도에만 사용해야 하는 것은 아니다. 즉, 일종의 변수로 보는 것이 좋다.


3) 레지스터의 길이

EXA(Extend) : 32bits

AX : 16bits

AL(low), AH(high) : 8bits


2. 스택 (Stack)


1) 개요

스택은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다.

스택은 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 푸시(Push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(Pop)이라고 한다. 이때 꺼내지는 자료는 가장 최근에 보관한 자료부터 나오게 된다.

Top(), Empty(), Push(), Pop() 등의 함수로 관리한다.


2) 스택의 용도

- 지역 변수의 저장

- 매개변수 전달

- 임시 데이터 백업

- 함수 호출, 복귀 정보 저장


3) Stack Frame

스택에 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라 하며, 이러한 스택 프레임에는 함수로 전달되는 인수와 함수 실행을 모두 마치면 돌아올 복귀 주소, 지역 변수 등의 정보가 들어간다. 

스택 프레임은 함수에 독립적인 메모리 영역이다.

함수 호출시 생성되고 복귀시 삭제한다.

함수는 Stack Frame을 독립적으로 사용한다.


4) Stack에서 사용되는 레지스터

- ESP : Stack의 가장 위의 주소를 가리킨다.

- EBP : Stack의 가장 밑의 주소를 가리킨다.

프로그램이  Stack안의 값을 참조할 때에는 ESP, EBP에 offset을 더하거나 빼서 참조한다.


5) Prolog & Epilog

Prolog : 함수 호출시 호출 받은 함수가 스택을 독립적으로 사용할 수 있도록 Stack Frame을 생성하는 작업

Epilog : 함수 복귀시 생성한 Stack Frame을 해제하고 함수 호출하기 이전의 Stack Frame을 되돌리는 작업


Posted by Imp3rio