MMIXAL 插入排序

66 阅读1分钟
            LOC     Data_Segment
            GREG    @
NUMS        OCTA    3,2,1,4,5,6,3,2,1,6,7
            LOC     #100
:Main       LDA     $3,NUMS            
            SET     $4,11
            PUSHJ   $2,:insertSort
            TRAP    0,Halt,0
// a is a0, n is the number of octas,
// a is sorted.
            PREFIX :insertSort:
t           IS      $255
a           IS      $0
n           IS      $1
jj          IS      $2
ii          IS      $3
key         IS      $4
ai          IS      $5
:insertSort SET     jj,8
            SL      n,n,3
0H          LDO     key,a,jj 
            SUB     ii,jj,8 
            BN      ii,1F // i < 0
3H          LDO     ai,a,ii
            CMP     t,ai,key
            BNP     t,1F
            ADD     ii,ii,8
            STO     ai,a,ii
            SUB     ii,ii,16
            BN      ii,1F
            JMP     3B
1H          ADD     ii,ii,8 // store key
            STO     key,a,ii
            ADDU    jj,jj,8
            CMPU    t,jj,n
            PBNZ    t,0B
            POP     0,0
            PREFIX  :