Summary
One of the key data structures in computing is the stack, or the LIFO queue. A stack is a queue with only one end – that is, new items enter at the same end as items leave. This single end is called the top of stack (TOS).
The stack is important because it enables the mechanization of many computing processes, ranging from dealing with arithmetic expressions to translating languages. Here, we are interested in the stack as a means of ensuring that subroutines are called and returned from in a consistent, efficient, and fool-proof manner.
A subroutine is a piece of code that can be called (invoked) from any point in a program and a return made to the calling point. This action requires the management of return addresses, and the stack is eminently suitable because the sequence of return addresses is the inverse sequence of the calling addresses – that is, the same as the order of items pushed and pulled from a stack.
We have looked at the ARM’s...