On 30 Jul 2008 at 4:39, John Samperi wrote:
> At 11:15 PM 29/07/2008, you wrote:
> >I'm looking for a 32-bit by 16-bit integer division
>
> Will 32 by 32 do?
>
> ;-------------------------------------------------------------------
> ----------:
> ; 32bit/32bit Unsigned Division
> ;
> ; Register Variables
> ; Call: var1[3:0] = dividend (0x00000000..0xffffffff)
> ; var2[3:0] = divisor (0x00000001..0x7fffffff)
> ; mod[3:0] = <don't care>
> ; lc = <don't care> (high register must be
> allocated)
> ;
> ; Result:var1[3:0] = var1[3:0] / var2[3:0]
> ; var2[3:0] = <not changed>
> ; mod[3:0] = var1[3:0] % var2[3:0]
> ; lc = 0
> ;
> ; Size = 26 words
> ; Clock = 549..677 cycles (+ret)
> ; Stack = 0 bytes
>
>
> div32u: clr mod0 ;initialize variables
> clr mod1 ; mod = 0;
> clr mod2 ; lc = 32;
> clr mod3 ;
> ldi lc,32 ;/
> ;---- calcurating loop
> lsl var10 ;var1 = var1 << 1;
> rol var11 ;
> rol var12 ;
> rol var13 ;/
> rol mod0 ;mod = mod << 1 + carry;
> rol mod1 ;
> rol mod2 ;
> rol mod3 ;/
> cp mod0,var20 ;if (mod => var2) {
> cpc mod1,var21 ; mod -= var2; var1++;
> cpc mod2,var22 ; }
> cpc mod3,var23 ;
> brcs PC+6 ;
> inc var10 ;
> sub mod0,var20 ;
> sbc mod1,var21 ;
> sbc mod2,var22 ;
> sbc mod3,var23 ;/
> dec lc ;if (--lc > 0)
> brne PC-19 ; continue loop;
> ret
>
>
>
> Regards
>
> John Samperi
>
Thank you, John!
I just deleted the mod2 and mod3 lines to transform your routine to
32bit/16bit. Worked nicely!
Mark JordanMessage
Re: [AVR-Chat] ASM 32-bit division routine?
2008-07-29 by Enki
Attachments
- No local attachments were found for this message.