; SUBROUTINE TO DIVIDE AN UNSIGNED 16-BIT # BY AN UNSIGNED 8-BIT #. ; ENTRY: (HL) = 16-BIT DIVIDEND, UNSIGNED. ; (D) = 8-BIT DIVISOR, UNSIGNED. ; CALL DIV16. ; EXIT: (IX) = 16-BIT QUOTIENT. ; (H) = 8-BIT REMAINDER. ; (L) = DESTROYED. ; (D) = UNCHANGED. ; (E) = 0. ; (A) = DESTROYED. ; .org 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. LD HL, 1234h ; ADDED FOR TESTING PURPOSES. LD D, 06H ; ADDED FOR TESTING PURPOSES. CALL DIV16 ; ADDED FOR TESTING PURPOSES. HALT ; ADDED FOR TESTING PURPOSES. DIV16: LD A, L ; LSB DIVIDEND. LD L, H ; MSB DIVIDEND. LD H, 0 ; CLEAR FOR SUBSTRACTION. LD E, 0 ; SETUP FOR SUBTRACT. LD B, 16 ; 16 ITERATIONS. LD IX, 0 ; INITIALIZE QUOTIENT. LOOP: ADD HL, HL ; SHIFT DIVIDEND LEFT. RLA ; SHIFT 8 LS 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. 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 Q BIT = 0. CONT: DJNZ LOOP ; GO IT NOT 16. RET ; RETURN. .END