스택은 메모리의 한 부분이고 LIFO 방식으로 동작한다
LIFO란 (Last Input First Output) : 마지막에 들어간 데이터가 처음에 나오는 방식
스택은 PUSH와 POP 두 가지 동작 지원
PUSH : 데이터를 스택에 집어넣는 명령어
POP : 데이터를 스택에서 꺼내는 명령어
스택은 한 방향으로 만 데이터가 쌓인다
PUSH를 하면 스탯의 주소는 4바이트만큼 감소하면서 데이터가 들어가고
POP을 하면 스택의 데이터가 꺼내진 다음 주소가 4바이트만큼 증가한다
스택은 시작 주소에서부터 주소가 작아지는 방향으로 데이터가 쌓인다
이렇게 동작하는 이유는 스택 구조 위에 있는 데이터가 시스템운영에 중요한 역할을 하기 때문
프로그램의 스택의 위치는 스택 포인터라고 불리는 ESP 레지스터에 지정되어있다
PUSH를 하거나 POP을 하면 ESP 레지스터 값이 4바이트씩 증가하거나 감소된다
스택은 서브루틴으로 인자를 전달하고
서브루틴 내부에서 사용하는 지역변수가 저장되는 공간을 제공하며 서브루틴이 종료될 때 되돌아갈 주소를 저장하는 역할을 한다
디버거로 어셈블러를 분석하면 함수를 호출할 때 정확하게 인자를 스택으로 PUSH 하고 서브루틴이 종료될 때 복귀 주소를 스택에서
POP 한다
참고