Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1186 savelij 1
        cpu     imp-16c/200
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
        skg     3,tabend        ; finished this pass?
33
        jmp     loop            ; no
34
        ld      0,flag          ; yes - did we make a swap?
35
        aisz    0,0
36
        jmp     .+2             ; yes - continue sort
37
        jmp     out             ; no - sort done
38
        li      0,0             ; initialize for next pass
39
        st      0,flag
40
        ld      3,tab
41
        jmp     loop
42
out:    ld      0,regs          ; restore registers
43
        ld      1,regs+1
44
        ld      2,regs+2
45
        ld      3,regs+3
46
        rts     2
47
 
48
        end