스택(stack)은 CPU 내부의 레지스터 집합에 존재하는 저장장치이며, 레지스터와는 다른 특징이 있다. 우선 데이터가 순차적으로 저장되며, 요소의 개수와 스택의 길이는 가변적이다. 그리고 한번에 하나의 요소에만 액세스 가능하다. 결과적으로 데이터 접근 방법은 '나중 입력 먼저 출력(LIFO: Last-In-First-Out)'의 특징을 갖는다.
스택의 동작에서 데이터가 입력되고 출력되는 액세스 부분을 스택의 Top이라고 한다. 그리고 스택의 Top에 새로운 요소를 추가 저장하는 동작을 PUSH라고 하며, 스택의 Top에서 하나의 요소를 꺼내는 동작을 POP이라고 한다. 연산 과정에서 Top에 위치한 요소는 POP 동작으로 스택에서 인출되어 연산을 수행하고, 연산의 결과를 다시 스택에 저장되도록 PUSH한다. 결과 데이터가 저장되었으므로 Top은 위쪽으로 이동된다. 스택 포인터는 Top의 위치를 표시하는 장치로 특수 레지스터를 이용하여 자동으로 처리된다.
[ 그림 6-7 ]은 스택의 Top과 PUSH, POP의 동작을 나타낸 것이다. (a)에서는 J 데이터가 제일 마지막으로 PUSH되어 입력되었고 스택 특성상 제일 먼저 출력될 수 있는 자격을 갖는다(LIFO). 그리고 이런 사실들을 나타내기 위하여 스택 포인터에는 Top의 위치를 표시해준다. 따라서 Top의 위치를 보고 입출력되는 부분이라는 것을 알게 되는 것이다. (b)에서는 데이터가 입력되는 PUSH 동작으로 데이터 I가 입력되고 Top이 위쪽으로 이동한 것을 확인할 수 있다. (c)에서는 PO의 동작으로 데이터 I가 인출되고 Top이 위쪽으로 이동한 것을 확인할 수 있다. (c)에서는 POP의 동작으로 데이터 I가 인출되고 Top이 아래쪽으로 이동한 것을 확인할 수 있다. (d)는 POP 동작이 한 번 더 일어나서 J가 인출된 후, 인출된 두 데이터 I와 J가 곱셈연산을 수행하고 그 결과가 다시 PUSH한 것을 나타낸다. 이 과정 동안 스택 포인터는 계속해서 이동하면서 Top의 위치를 알려준다.
[ 그림 6-7 ]