home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol010 / div16b.asm < prev    next >
Assembly Source File  |  1984-04-29  |  826b  |  27 lines

  1. ; DIV16B - DIVIDE 16 BIT NUMBER IN HL BY 8 BIT NUMBER IN C
  2. ;       QUOTIENT RETURNED IN HL, REMAINDER IN A
  3. ; BY BRUCE R. RATOFF 12/11/80
  4. ;
  5. ; THIS IS A 16/8 DIVIDE WITH A DIFFERENCE IN THAT MOST TEXTBOOK
  6. ; EXAMPLES OF 16/8-BIT DIVISION WILL FAIL WHEN THE QUOTIENT EXCEEDS
  7. ; 8 BITS.  HERE THE PROBLEM IS CIRCUMVENTED BY USING THE ACCUMULATOR
  8. ; AS A HIGH ORDER EXTENSION OF THE DIVIDEND.
  9. ;
  10. ;
  11. DIV16B:
  12.     SUB    A        ; CLEAR THIRD ORDER DIVIDEND
  13.     MVI    B,16        ; INITIALIZE 16 BIT SHIFT COUNT
  14. DLUP:
  15.     DAD    H        ; SHIFT DIVIDEND LEFT
  16.     ADC    A        ; HIGH BIT SHIFTS INTO ACC
  17.     SUB    C        ; SUBTRACT DIVISOR
  18.     INX    H        ; SET LOW QUOTIENT BIT
  19.     JNC    SOK        ; SKIP AHEAD IF SUBTRACT SUCCEEDED
  20.     ADD    C        ; ELSE REVERSE SUBTRACTION
  21.     DCX    H        ; AND CLEAR LOW QUOTIENT BIT
  22. SOK:
  23.     DCR    B        ; COUNT DOWN 16 BITS
  24.     JNZ    DLUP        ; LOOP IF MORE
  25.     RET            ; ALL DONE
  26. ;
  27.