home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume5 / smallc / part3 / 6809 / sumul.u < prev   
Encoding:
Text File  |  1986-11-30  |  591 b   |  33 lines

  1. |    signed/unsigned multiply
  2. |    calling (left * right)
  3. |    push left
  4. |    ldd right
  5. |    jsr [u|s]mul (same entry point)
  6. |    result in d, stack is popped
  7. .globl smul,umul
  8. smul=.
  9. umul:    pshs    d
  10.     lda    2+2(s)
  11.     mul        | left msb * right lsb
  12.     pshs    b    | save high order
  13.     ldb    -1+3(s)    | right lsb
  14.     lda    3+3(s)    | left lsb
  15.     mul
  16.     pshs    d
  17.     lda    3+5(s)    | left lsb
  18.     ldb    -2+5(s)    | right msb
  19.     beq    small    | is zero?
  20.     mul        | no, gotta do it too
  21.     tfr    b,a
  22.     clrb
  23.     addd    (s)++    | partial prod
  24.     bra    big
  25. small:    puls    d    | aha! don't need third mul
  26. big:    adda    (s)+
  27.     pshs    d
  28.     ldd    4(s)    | rearrange return address
  29.     std    6(s)
  30.     puls    d
  31.     leas    4(s)
  32.     rts
  33.