Page 50 of 62
SBasic User's Manual SBasic Version 2.7 Page 50
Printed: December 5, 1999
The data stack
SBasic supports a data stack, for temporary storage of data. For the
68hc11 and 68hc12 MCUs, the data stack resides about 32 bytes below
the return stack. Both stacks grow downward (towards lower addresses)
as items are pushed onto them.
Do not confuse the use of these two stacks. The return stack holds
all data used by the target MCU in servicing interrupts and subroutine
calls. Items placed on the return stack are not currently accessible
by your SBasic code.
The data stack, however, contains items explicitly placed by your
program. You are free to use the data stack in any manner you like,
and items placed on the stack will remain until your code specifically
removes or modifies them.
You can push items onto the data stack by using the PUSH statement.
The PUSH statement takes a single argument; the 16-bit value of that
argument will be pushed onto the data stack.
Example:
push n+5
adds 5 to the current value of N and pushes the sum onto the data
stack. The value in N does not change.
The size of the data stack depends on where you place the return
stack, using the /S option. The data stack will grow downward in
memory until it runs into whatever values, if any, lie below it.
There are no runtime checks for pushing too many items onto the data
stack.
You can pull (or pop) items from the data stack by using the POP()
function. POP() returns the top (most recent) item pushed onto the
data stack.
Example:
n = pop() + 5
pops the top item off the data stack, adds 5 to that value, and stores
the sum in variable N.
There are no runtime checks for popping too many items from the data
stack. The data stack resides below the return stack, and popping
items causes the data stack pointer to move upwards in memory. If you
pop more items from the data stack than you pushed onto it, you risk
corrupting the return stack. This in turn will cause your program to
crash on a later RETURN statement.