-         cpu     imp-16c/200 
-   
- flag:   word    0               ; if non-zero, swap made during pass 
- tab:                            ; vector address 
- .       =       .+1 
- tabend:                         ; sort limit 
- .       =       .+1 
- regs:                           ; register save area 
- .       =       .+4 
- ssort:  st      0,regs          ; save registers 
-         st      1,regs+1 
-         st      2,regs+2 
-         st      3,regs+3 
-         pull    2               ; obtain address of parameter list 
-         push    2 
-         li      0,0 
-         st      0,flag 
-         ld      3,1(2)          ; end of vector 
-         aisz    3,-1 
-         st      3,tabend 
-         ld      3,(2)           ; vector address 
-         st      3,tab 
- loop:   ld      0,(3)           ; get a value 
-         skg     0,1(3)          ; compare against next value 
-         jmp     test            ; values in order 
-         ld      1,1(3)          ; swap value 
-         st      0,1(3) 
-         st      1,0(3) 
-         li      1,1             ; set sort flg non-zero 
-         st      1,flag 
- test:   aisz    3,1             ; increment table pointer 
-         skg     3,tabend        ; finished this pass? 
-         jmp     loop            ; no 
-         ld      0,flag          ; yes - did we make a swap? 
-         aisz    0,0 
-         jmp     .+2             ; yes - continue sort 
-         jmp     out             ; no - sort done 
-         li      0,0             ; initialize for next pass 
-         st      0,flag 
-         ld      3,tab 
-         jmp     loop 
- out:    ld      0,regs          ; restore registers 
-         ld      1,regs+1 
-         ld      2,regs+2 
-         ld      3,regs+3 
-         rts     2 
-   
-         end 
-