i turned your #Forth into Pascal and you can't do nothing about it!

10 constant n
create list
3 , 4 , 1 , 9 , 5 , 7 , 2 , 8 , 0 , 6 ,

: show
n 0 do i cells list + ? loop cr ;

procedure ( sort ) of: list^ of: a' of: b'
var a var b var x
: item ( i -- addr ) cells list^ @ + ;
called sort
a' @ a ! b' @ b !
a @ b @ + 2/ item @ x !
begin
begin a @ item @ x @ < while 1 a +! repeat
begin x @ b @ item @ < while -1 b +! repeat
a @ b @ <= if
a @ item @ b @ item @
a @ item ! b @ item !
1 a +! -1 b +!
show
then
a @ b @ > until
a' @ b @ < if list^ @ a' @ b @ recurse then
a @ b' @ < if list^ @ a @ b' @ recurse then
end

show
list 0 n 1- sort

The words in question:

variable frame

: header ( size -- )
frame @ here ! here frame ! allot ;

: footer ( -size -- )
frame @ @ frame ! allot ;

: local ( offset size -- offset )
create over , +
does> ( -- addr )
@ frame @ + ;

: var ( offset -- offset )
1 cells local ;

: of: ( argc offset -- argc offset )
swap 1+ swap var ;

: deposit ( x offset -- )
frame @ + ! ;

: argument ( n -- )
1+ cells postpone literal postpone deposit ;

: procedure ( -- argc offset )
0 1 cells ;

: called ( argc size -- size )
>r >r : r> r> ( suppress pForth's error on stack depth mismatch )
dup postpone literal postpone header
swap begin dup while 1- dup argument repeat drop ;

: end ( size -- )
negate postpone literal postpone footer postpone ; ; immediate