``````* Permutation generator a la Heap
``````N  IS   5               \$n\$ (3, 4, 5, or 6)
``````t  IS   \$255
``````j  IS   \$0              \$8j\$
``````k  IS   \$1              \$8k\$
``````ak IS   \$2
``````aj IS   \$3
``````
``````   LOC  Data_Segment
``````a  GREG @               Base address for \$a_0\ldots a_{n-1}\$
``````A0 IS   @
``````A1 IS   @+8
``````A2 IS   @+16
``````*  LOC  @+8*N           Space for \$a_0\ldots a_{n-1}\$
``````   BYTE "11111111","22222222","33333333"
``````   BYTE "44444444","55555555","66666666"
``````   BYTE #a,0
``````   LOC  (@+7)&-8        (align to octabyte)
``````c  GREG @-8*3           Location of \$c_0\$
``````   LOC  @-8*3+8*N       \$8c_3\ldots 8c_{n-1}\$, initially zero
``````   OCTA -1              \$c_n=-1\$, a convenient sentinel
``````u  GREG 0               Contents of \$a_0\$, except in inner loop
``````v  GREG 0               Contents of \$a_1\$, except in inner loop
``````w  GREG 0               Contents of \$a_2\$, except in inner loop
``````
``````   LOC  #100
``````1H STCO 0,c,k           \$c_k\gets 0\$.
``````   INCL k,8             \$k\gets k+1\$.
``````0H LDO  j,c,k           \$j\gets c_k\$.
``````   CMP  t,j,k
``````   BZ   t,1B            Loop if \$c_k=k\$.
``````   BN   j,Done          Terminate if \$c_k<0\$ (\$k=n\$).
``````   LDO  ak,a,k          Fetch \$a_k\$.
``````   ADD  t,j,8
``````   STO  t,c,k           \$c_k\gets j+1\$.
``````   AND  t,k,#8
``````   CSZ  j,t,0           Set \$j\gets 0\$ if \$k\$ is even.
``````   LDO  aj,a,j          Fetch \$a_j\$.
``````   STO  ak,a,j          Replace it by \$a_k\$.
``````   CSZ  u,j,ak          Set \$u\gets a_k\$ if \$j=0\$.
``````   SUB  j,j,8           \$j\gets j-1\$.
``````   CSZ  v,j,ak          Set \$v\gets a_k\$ if \$j=0\$.
``````   SUB  j,j,8           \$j\gets j-1\$.
``````   CSZ  w,j,ak          Set \$w\gets a_k\$ if \$j=0\$.
``````   STO  aj,a,k          Replace \$a_k\$ by what was \$a_j\$.
``````In PUSHJ 0,Visit
``````   STO   v,A0           \$a_0\gets v\$.
``````   STO   u,A1           \$a_1\gets u\$.
``````   PUSHJ 0,Visit
``````   STO   w,A0           \$a_0\gets w\$.
``````   STO   v,A2           \$a_2\gets v\$.
``````   PUSHJ 0,Visit
``````   STO   u,A0           \$a_0\gets u\$.
``````   STO   w,A1           \$a_1\gets w\$.
``````   PUSHJ 0,Visit
``````   STO   v,A0           \$a_0\gets v\$.
``````   STO   u,A2           \$a_2\gets u\$.
``````   PUSHJ 0,Visit
``````   STO   w,A0           \$a_0\gets w\$.
``````   STO   v,A1           \$a_1\gets v\$.
``````   PUSHJ 0,Visit
``````   SET   t,u            Swap \$u\leftrightarrow w\$.
``````   SET   u,w
``````   SET   w,t
``````   SET   k,8*3          \$k\gets3\$.
``````   JMP   0B
``````
``````Visit LDA  t,A0
``````      TRAP 0,Fputs,StdOut
``````      POP
``````Main  LDO  u,A0
``````      LDO  v,A1
``````      LDO  w,A2
``````      JMP  In
``````Done  TRAP 0,Halt,0
``````