??? 05/06/04 14:03 Read: times |
#69942 - RE: 16-bit division Responding to: ???'s previous message |
Nico:
Here is the 16/16 divide that I have used on numerous projects. Give it a try. It is most likely very similar to library code at this site. ;==================================================================== ; subroutine UDIV16 ; 16-Bit / 16-Bit to 16-Bit Quotient & Remainder Unsigned Divide ; ; input: r1, r0 = Dividend X ; r3, r2 = Divisor Y ; ; output: r1, r0 = quotient Q of division Q = X / Y ; r3, r2 = remainder ; ; alters: acc, B, dpl, dph, r4, r5, r6, r7, flags ;==================================================================== UDIV16: MOV R7, #0 ; clear partial remainder MOV R6, #0 MOV B, #16 ; set loop count ; DIV_LOOP: CLR C ; clear carry flag MOV A, R0 ; shift the highest bit of RLC A ; the dividend into... MOV R0, A MOV A, R1 RLC A MOV R1, A MOV A, R6 ; ... the lowest bit of the RLC A ; partial remainder MOV R6, A MOV A, R7 RLC A MOV R7, A MOV A, R6 ; trial subtract divisor CLR C ; from partial remainder SUBB A, R2 MOV DPL, A MOV A, R7 SUBB A, R3 MOV DPH, A CPL C ; complement external borrow JNC DIV_1 ; update partial remainder if ; borrow MOV R7, DPH ; update partial remainder MOV R6, DPL DIV_1: MOV A, R4 ; shift result bit into partial RLC A ; quotient MOV R4, A MOV A, R5 RLC A MOV R5, A DJNZ B, DIV_LOOP MOV A, R5 ; put quotient in r0, and r1 MOV R1, A MOV A, R4 MOV R0, A MOV A, R7 ; get remainder, saved before the MOV R3, A ; last subtraction MOV A, R6 MOV R2, A RET Michael Karas |
Topic | Author | Date |
16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division | 01/01/70 00:00 | |
RE: 16-bit division![]() | 01/01/70 00:00 |