Intoduction to Stack¶
A stack is an abstract data type frequently used in computer science. It has a property that the Last item placed will be the first to be removed from it ( LIFO ) . Several options are defined on the stack , the most important ones are push
and pop
. push
add an element to the top of the stack , and pop
removes elements from the top .
/* The address of memory which is pointed by the Stack Pointer ( sp ) is the top of the stack */
┌──────────────┐ <─ sp
└──────────────┘
: push 0x10 /* sp is incremented and the value is stored at that address */
┌──────────────┐
│ 0x10 │
└──────────────┘ <─ sp
: push 0x20
┌──────────────┐
│ 0x10 │
├──────────────┤
│ 0x20 │
└──────────────┘ <─ sp
: pop var /* The value pointed by the sp is removed from the stack and sp is decremented */
┌──────────────┐
│ 0x10 │
└──────────────┘ <─ sp
Modern computers are designed with the need of high-level languages in mind. The most important technique for structuring programs introduced by high-level languages is the function. From one point of view, a function call alters the flow of control just as a jump does, but unlike a jump, when finished performing its task, a function returns control to the statement or instruction following the call. This high-level abstraction is implemented with the help of the stack.
The stack is also used to allocate local variables , to pass parameters to the functions, and to store the information needed to return to caller function after the execution of the function gets over.
The stack pointer is a special register which will always point to the top of the stack , in x86-32 bit this register is called esp
.The area allocated on the stack for a function is called it's stack frame . and the registers ebp
and esp
(in x86-32 bit system )are used to specify the boundaries of the stack frame . The ebp
will point to the staring of the stack frame of the current function and the esp
register will point to the bottom.