Stack

11 views
Skip to first unread message

燕南

unread,
Apr 25, 2019, 12:16:06 AM4/25/19
to 符式協會
: Stack ( size -<name>- ) 
  create 
  dup
  4 +
  here 
  swap
  allocate
  if  
     drop 0 
  then
     dup rot !  \ 紀錄 Stack空間位置
     dup >R !          \ Stack第一個空間位置放 Stack_size
     0 r> 4 + !     
  does>
  ;
  
: Stack.depth@    ( STACK_adr -- n ) 
  @ 4 + @
  ;

: Stack.depth!    ( n STACK_adr -- ) 
  @ 4 + !
  ;


: Stack.free ( STACK_adr -- )
  @ free
  if
    ." free failed! "
  else
    ." free ok!"
  then
  ;
 
: >Stack ( n STACK_adr -- ) 
  @ >r
  r@ 4 + @ 1 + r@ 4 + !  
  r@ 4 + @ 4 *  4 + r> + !  
  ;
  
: Stack> ( STACK_adr -- n ) 
  @ >r
  r@ 4 + @ 4 *  4 + r@ + @ 
  r@ 4 + @ 1 - r> 4 + ! 
  ;  
  

: Stack@ ( STACK_adr -- n ) 
  @ >r
  r@ 4 + @ 4 *  4 + r> + @
  ;  
    
 
 
\ stack test 
cr
   
100 Stack Stack_Name
\ 0 Stack_Name Stack.depth!
1 Stack_Name >Stack
Stack_Name Stack@ . cr
2 Stack_Name >Stack
Stack_Name Stack@ .  cr
3 Stack_Name >Stack
Stack_Name Stack@ . cr

Stack_Name Stack> . cr
Stack_Name Stack> . cr
Stack_Name Stack> . cr

Stack_Name Stack.free








free ok! ok




Reply all
Reply to author
Forward
0 new messages