home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC6.DMS / in.adf / libsrc.lha / LIBSRC / binsearch.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-08  |  1.1 KB  |  64 lines

  1.  
  2. * Maxon C++ Library:
  3. * Modul "binsearch"
  4. * Jens Gelhar 18.03.93
  5.  
  6.     xdef _bsearch,bsearch__PCvPCvUiUiPFiPCvPCvp
  7.  
  8.     xref uintmult
  9.  
  10. _bsearch:
  11. bsearch__PCvPCvUiUiPFiPCvPCvp:
  12.     ; Stack-Parameter: 0 Zeiger auf Key
  13.     ;                  4 Vector
  14.     ;                  8 Anzahl
  15.     ;                 12 Elementgröße
  16.     ;                 16 Vergleichfunktion
  17.     movem.l    d1-d3/a0-a2/a6,-(a7)
  18.     move.l    7*4+4+0(a7),a2        ; Key
  19.     move.l    7*4+4+4(a7),a0        ; Vector
  20.     move.l    7*4+4+8(a7),d3        ; Anzahl
  21.     move.l    7*4+4+12(a7),d2        ; Größe
  22.     move.l    7*4+4+16(a7),a6        ; Function
  23.     cmp.l    #2,d2
  24.     bls.b    Loop
  25.     addq.l    #1,d2
  26.     and.w    #$FFFE,d2        ; Alignment
  27. Loop    tst.l    d3
  28.     beq.b    nix            ; nicht gefunden
  29.     move.l    d3,d1
  30.     lsr.l    #1,d1
  31.     move.l    d2,d0
  32.     jsr    uintmult
  33.     add.l    a0,d0
  34.     move.l    d0,a1
  35.     movem.l    d1/a0/a1,-(a7)
  36.     move.l    d0,-(a7)
  37.     move.l    a2,-(a7)
  38.     jsr    (a6)
  39.     addq.l    #8,a7
  40.     movem.l    (a7)+,d1/a0/a1
  41.     tst.l    d0
  42.     beq.b    jau
  43.     bmi.b    links
  44.     ; rechts von a1 suchen:
  45.     move.l a1,a0
  46.     add.l d2,a0
  47.     move.l d3,d1
  48.     lsr.l #1,d1
  49.     addq.l #1,d1
  50.     sub.l d1,d3
  51.     bra.b Loop
  52. links    ; links von a1 suchen:
  53.     lsr.l    #1,d3
  54.     bra.b    Loop
  55. jau    ; gefunden:
  56.     move.l    a1,d0
  57.     bra.b    end
  58. nix    moveq    #0,d0
  59. end    movem.l    (a7)+,d1-d3/a0-a2/a6
  60.     rts
  61.  
  62.     end
  63.  
  64.