
많은 범용 프로세서들은 메모리 스택을 구현할 수 있는 메커니즘 제공
프로시저 호출은 소프트웨어에서의 추상화
지정된 인자들과 리턴값으로 특정 기능을 구현하는 코드를 감싸주는 방법을 제공한다
이 함수는 프로그램의 여러지점으로부터 호출될 수 있게된다.
프로시저 P가 프로시저 Q를 호출하고 Q가 실행한 후 다시 P로 리턴한다고 가정하자
x86-64 : 프로시저가 요구하는 메커니즘만 최소한으로 구현
Q가 실행될 때 P는 일시적으로 정지
스택을 사용해서 프로시저들이 요구하는 저장장소를 관리할 수 있다
스택은 작은 주소 방향으로 성장하며 %rsp는 스택의 최상위원소를 가리킨다
프로시저 호출 시 P의 스택프레임에 Q에대한 매개변수, 리턴 주소, 필요에 따라 P의 로컬변수의 레지스터 상태를 저장하기 위한 공간을 포함한다
Q가 호출되면 스택포인터는 새로운 스텍프레임(Q 로컬변수, 임시데이터)을 위해 조정
스택프레임: 활성화 기록, 프로시저 반환주소, 전달된 매개변수, 저장된 레지스터, 지역변수등을 위한 스택의 일부

프로시저의 스택 프래임: 레지스터들에 저장할 수 있는 개수 이상의 저장공간을 필요로 할때 공간에 스택 할당
P의 스택 프레임: P의 지역변수, P의 매개변수, Q호출에 필요한 매개변수, P에서 Q로 제어가 넘어갈때 필요한 리턴 주소
Q의 스택 프레임: Q의 지역변수, Q의 매개변수(P에서 넘겨준 값들), Q의 실행 중 필요한 추가 정보 (레지스터 상태 저장 etc.), Q가 종료된 후 제어를 돌려받을 P의 위치정보(리턴주소)
각 스택프레임은 독립적인 저장 공간을 가지며 프로시저 실행에 필요한 모든 정보 포함
현재 실행중인 프로시저에 대한 프레임은 항상 스택 맨위에 위치
호출프로그램이 인수를 스택에 Push, 프로시저 호출
호출된 EBP 스택에 push, ebp를 esp로 설정
지역변수가 필요하면 상수를 ESP에서 빼서 스택에 공간을 만듬
(cf.
esp: stack pointer register - 스택 크기 조정 레지스터, 스택 최상단 주소값을 가지고 있으니 스택의 크기를 나타낸다(스택제일 아래에 위치). 어셈블리어 Push 즉, 스택에 값을 넣는 동작을 할때 ESP가 4만큼 줄어들고 메모리 공간을 늘려준다 (스택 제일 아래에는 높은 주소값, 갈수록 낮은 주소값을 가지니 4를 줄임
ebp: Base pointer register - 스택프레임 형태로 저장된 함수의 지역변수, 전달 인자를 참조, 값을 바꿀때 사용하는 레지스터
현재 스택프레임의 최하단주소(Base)저장 레지스터
E가 붙는 것은 16비트에서 32비트 시스템으로 오면서 Extended 된 개념, 64비트에서는 R이 붙음)
