home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol010
/
div16b.asm
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
826b
|
27 lines
; DIV16B - DIVIDE 16 BIT NUMBER IN HL BY 8 BIT NUMBER IN C
; QUOTIENT RETURNED IN HL, REMAINDER IN A
; BY BRUCE R. RATOFF 12/11/80
;
; THIS IS A 16/8 DIVIDE WITH A DIFFERENCE IN THAT MOST TEXTBOOK
; EXAMPLES OF 16/8-BIT DIVISION WILL FAIL WHEN THE QUOTIENT EXCEEDS
; 8 BITS. HERE THE PROBLEM IS CIRCUMVENTED BY USING THE ACCUMULATOR
; AS A HIGH ORDER EXTENSION OF THE DIVIDEND.
;
;
DIV16B:
SUB A ; CLEAR THIRD ORDER DIVIDEND
MVI B,16 ; INITIALIZE 16 BIT SHIFT COUNT
DLUP:
DAD H ; SHIFT DIVIDEND LEFT
ADC A ; HIGH BIT SHIFTS INTO ACC
SUB C ; SUBTRACT DIVISOR
INX H ; SET LOW QUOTIENT BIT
JNC SOK ; SKIP AHEAD IF SUBTRACT SUCCEEDED
ADD C ; ELSE REVERSE SUBTRACTION
DCX H ; AND CLEAR LOW QUOTIENT BIT
SOK:
DCR B ; COUNT DOWN 16 BITS
JNZ DLUP ; LOOP IF MORE
RET ; ALL DONE
;