; Stack macro example ; Peter Christen, 29 March 2004 ; ; define macros macro Push (e) ; push value of e onto stack ; (use before call proc. with value parameters) load e ; (AC = ) incsp #1 ; (SP = SP + 1; done last in case e=!num) store !0 ; (Memory[SP] = AC) endmacro macro Pusha (Addr) ; push address of addr onto stack ; (use before calling proc. with address/array parameters) loada Addr ; (AC = Addr) incsp #1 ; (SP = SP + 1) store !0 ; (Memory[SP] = AC) endmacro macro Pop (n) ; pop n elements of the stack ; (use at end of call) incsp #-n ; (SP = SP - n) endmacro ; int main() { n: block 1 ; int n; stackmacro: ; load #1 ; n = 1; store n ; ; Push (n) ; // push n onto stack ; Pop (1) ; // pop it off again ; trap #1 ; return 0; end stackmacro;}