; Input: 32-bit Dividend in DIVIDEND3:DIVIDEND0 ; 16-bit Divisor in DIVISORH:DIVISORL ; Output: 32-bit Quotient in QUOTIENT3:QUOTIENT0 ; 16-bit Remainder in REMAINDERH:REMAINDERL ; Initialize Remainder and Quotient CLRF REMAINDERH ; Clear Remainder (high byte) CLRF REMAINDERL ; Clear Remainder (low byte) CLRF QUOTIENT3 ; Clear Quotient (MSB) CLRF QUOTIENT2 ; Clear Quotient CLRF QUOTIENT1 ; Clear Quotient CLRF QUOTIENT0 ; Clear Quotient (LSB) ; Loop counter for 32 bits MOVLW 32 ; 32 iterations for 32-bit division MOVWF COUNT ; Store loop counter DIVIDE_LOOP: ; Shift left the Dividend and Quotient RLNCF DIVIDEND0, F ; Shift left DIVIDEND0, LSB into Carry RLNCF DIVIDEND1, F ; Shift left DIVIDEND1 RLNCF DIVIDEND2, F ; Shift left DIVIDEND2 RLNCF DIVIDEND3, F ; Shift left DIVIDEND3 RLNCF QUOTIENT0, F ; Shift left QUOTIENT0 RLNCF QUOTIENT1, F ; Shift left QUOTIENT1 RLNCF QUOTIENT2, F ; Shift left QUOTIENT2 RLNCF QUOTIENT3, F ; Shift left QUOTIENT3 ; Shift left the Remainder with Carry RLNCF REMAINDERL, F ; Shift left REMAINDERL RLNCF REMAINDERH, F ; Shift left REMAINDERH ; Subtract Divisor from Remainder MOVF DIVISORL, W ; Load Divisor (low byte) SUBWF REMAINDERL, F ; Subtract from Remainder (low byte) MOVF DIVISORH, W ; Load Divisor (high byte) SUBWFB REMAINDERH, F ; Subtract with borrow from Remainder (high byte) ; Check if Remainder >= 0 BNC REMAINDER_NEG ; If Carry is clear, Remainder is negative ; Remainder is positive, set LSB of Quotient BSF QUOTIENT0, 0 ; Set LSB of Quotient BRA NEXT_ITERATION ; Continue to next iteration REMAINDER_NEG: ; Remainder is negative, restore it by adding Divisor back MOVF DIVISORL, W ; Load Divisor (low byte) ADDWF REMAINDERL, F ; Add to Remainder (low byte) MOVF DIVISORH, W ; Load Divisor (high byte) ADDWFC REMAINDERH, F ; Add with carry to Remainder (high byte) NEXT_ITERATION: ; Decrement loop counter and check if done DECFSZ COUNT, F ; Decrement COUNT, skip if zero BRA DIVIDE_LOOP ; Repeat for next bit ; Division complete ; Quotient is in QUOTIENT3:QUOTIENT0 ; Remainder is in REMAINDERH:REMAINDERL