Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1.         cpu     ipc-16
  2.  
  3. flag:   word    0               ; if non-zero, swap made during pass
  4. tab:                            ; vector address
  5. .       =       .+1
  6. tabend:                         ; sort limit
  7. .       =       .+1
  8. regs:                           ; register save area
  9. .       =       .+4
  10. ssort:  st      0,regs          ; save registers
  11.         st      1,regs+1
  12.         st      2,regs+2
  13.         st      3,regs+3
  14.         pull    2               ; obtain address of parameter list
  15.         push    2
  16.         li      0,0
  17.         st      0,flag
  18.         ld      3,1(2)          ; end of vector
  19.         aisz    3,-1
  20.         st      3,tabend
  21.         ld      3,(2)           ; vector address
  22.         st      3,tab
  23. loop:   ld      0,(3)           ; get a value
  24.         skg     0,1(3)          ; compare against next value
  25.         jmp     test            ; values in order
  26.         ld      1,1(3)          ; swap value
  27.         st      0,1(3)
  28.         st      1,0(3)
  29.         li      1,1             ; set sort flg non-zero
  30.         st      1,flag
  31. test:   aisz    3,1             ; increment table pointer
  32.         rcpy    3,0
  33.         skg     0,tabend        ; finished this pass?
  34.         jmp     loop            ; no
  35.         ld      0,flag          ; yes - did we make a swap?
  36.         aisz    0,0
  37.         jmp     .+2             ; yes - continue sort
  38.         jmp     out             ; no - sort done
  39.         li      0,0             ; initialize for next pass
  40.         st      0,flag
  41.         ld      3,tab
  42.         jmp     loop
  43. out:    ld      0,regs          ; restore registers
  44.         ld      1,regs+1
  45.         ld      2,regs+2
  46.         ld      3,regs+3
  47.         rts     2
  48.  
  49.         end
  50.