; SUBROUTINE TO DIVIDE 16-BIT NUMBER BY 8-BIT NUMBER. ; ENTRY: (HL) = DIVIDEND, 16 BITS. ; (D) = DIVISOR, 8 BITS. ; CALL DIV16. ; EXIT: (IX) = QUOTIENT, 16 BITS. ; (H) = REMAINDER, 8 BITS. ; (L) = DESTROYED. ; (D) = UNCHANGED. ; (E) = 0. ; (A) = DESTROYED. ; .ORG 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. LD HL, 257 ; ADDED FOR TESTING PURPOSES. 0101h. LD D, 64 ; ADDED FOR TESTING PURPOSES. 0040h. CALL DIV16 ; ADDED FOR TESTING PURPOSES. HALT ; ADDED FOR TESTING PURPOSES. DIV16: LD A, L ; LEAST SIGNIFICANT BYTE DIVIDEND. LD L, H ; MOST SIGNIFICANT BYTE DIVIDEND. LD H, 0 ; CLEAR FOR SUBTRACTION. LD E, 8 ; SETUP FOR SUBTRACTION. LD B, 10h ; 16 ITERATIONS. LD IX, 0 ; INITIALIZE QUOTIENT. LOOP: ADD HL, HL ; SHIFT DIVIDEND LEFT. RLA ; SHIFT 8 LEAST SIGNIFICANT BITS. JP NC, LOOP1 ; GO IF 0 BIT. INC L ; SHIFT TO HL. LOOP1: ADD IX, IX ; SHIFT QUOTIENT LEFT. INC IX ; Q BIT = 1. (QUOTIENT BIT.) OR A ; CLEAR CARRY FOR SUBTRACTION. SBC HL, DE ; TRY SUBTRACT. JP NC, CONT ; GO IF IT WENT. ADD HL, DE ; RESTORE. DEC IX ; SET QBIT = 0. CONT: DJNZ LOOP ; GO IF NOT 16. RET ; RETURN. .END