|
The stack pointer SP points at the top of the program stack
All memory cells that lies below the memory location pointed to by SP are used (= reserved/allocated)
|
The stack pointer will move up to indicate that the space is reserved (for the variable x).
(The ARM processor can only push the value in a whole register (= 32 bits) on the stack.
If you push a data that consists of less than 32 bits, then you (as an assembler programmer) need to manage that yourself.
To avoid this tedious task, I will only push int typed (= 32 bits) on the stack....)
push {regName} // Push the value in "regName" onto the program stack
|
Note:
|
Example:
main:
mov r0, #4
push {r0} // Push value in r0 on stack
mov r0, #9
push {r0} // Push value in r0 on stack
|
Result after the first push instruction (snapshot from EGTAPI's stack area)
|
Notice that the stack pointer register SP (= 0x7affc) is pointing to the top of the program stack
Result after the second push instruction (snapshot from EGTAPI's stack area)
|
Notice that the stack pointer register SP (= 0x7aff8) is updated and still points to the top of the program stack
How to run the program:
|
pop {regName} // Pop the int typed value from the top
// of the program stack and store it in register "regName"
|
Example:
main:
mov r0, #4
push {r0}
mov r0, #9
push {r0}
pop {r1} // r1 = 9
pop {r2} // r2 = 4
|
How to run the program:
|
Suppose the following is the state of the Program Stack after we have reserved some memory for the variable x:
|
If we want to de-allocate the memory space used for variable x and discard the value in the de-alocated variable, the resulting stack will look like this:
|
In this example, we assume that the value in the variable x is no longer needed nor used in future computation.
I.e.: we discard the variable stored in the variable x
|
Example: to de-allocate one int typed variable from the (top of the) program stack, we use:
add sp, sp, #4 // Move program stacktop down 4 bytes
// This will remove the reservation of 4 bytes
// that was used to stored the int typed variable
|
Example: to de-allocate two int typed variable from the (top of the) program stack, we use:
add sp, sp, #8 // Move program stacktop down 8 bytes
// This will remove the reservation of 8 bytes
// that was used to stored TWO int typed variable
|
|
|