Divide 16-bit by 16-bit

This subroutine will divide 16-bit value at r19:r18 with 16-bit value at r21:r20. Result is 16-bit at r19:r18 and remainder is 16-bit at r1:r0.

    (r19:r18)
    (r21:r20)
    --------- :
    (r19:r18)    mod    (r1:r0)

div16by16:
    mov     r19,r3
    mov     r18,r2       
    ldi     r22,0x0d   
    ldi     r21,0x80   
    rcall   div16by16   
    mov     r18,r2       
    mov     r19,r3       
    mov     r20,r4       

    clr     r0       
    clr     r1   
    ldi     r16,16   
    lsl     r18       
    rol     r19       
    rol     r0       
    rol     r1       
    cp      r0,r21   
    cpc     r1,r22   
    brcs    PC+4       
    inc     r18   
    sub     r0,r21   
    sbc     r1,r22   
    dec     r16       
    brne    PC-11       
    ret