This is an extension of the Apoo vpu for dealing with activation records. It is available as version 3.0.
There are two programmable registers to address the system stack: stack register and frame register. They correspond to the last two registers of a Apoo vpu configuration, Rn-1 and Rn-2, but are aliased to rs and rf, respectively. The stack register rs contains the address of the last stack memory cell (or -1 if no static memory is allocated). The instructions jsr, rtn, push and pop manipulates the stack in the usual way. Besides that, the contents of the stack register can be manipulated as any other register.
The frame register can be used for the implementation of local information (on the system stack). It contents should be the first stack address of the current activation record. Like the stack register it can be manipulated as any other register, but it is also used in two special instructions: storeo and loado.
In both instructions, if Num is non negative it should correspond to local memory and if it is negative, possibly corresponds to arguments of a subroutine call.
Here is an example of the use of these registers, for the implementation of subroutines with arguments (passed on the stack) and local memory.
n: const 5 loadn 4 r1 # an argument push r1 zero r1 jsr test pop r1 halt test: push rf #saves the current frame pointer #current frame pointer storer rs rf loadn 6 r2 # reserves some local space add r2 rs # gets the argument loado -2 r1 # only testing the rs push r1 pop r1 #stores contents of r1 at rf+1 storeo r1 1 #loads the same value into r3 loado 1 r3 # restores stack before return sub rs r2 storer r2 rs # restores frame before return pop rf rtn
A more complete example can be found here.
Rogério Reis,Nelma Moreira 2008-03-14