32 bit divide
pullmoll
Posts: 817
I need a 32bit divide with a 32bit result. The standard divide by 16 bit would overflow the quotient: clkfreq / <value between 1 and 16383>.
Would this code do the job?
Or would it not work for 32bits to have the dividend and the result in the same long? I can't seem to wrap my mind around it.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
He died at the console of hunger and thirst.
Next day he was buried. Face down, nine edge first.
Post Edited (pullmoll) : 4/6/2010 12:05:49 PM GMT
Would this code do the job?
div32_t1_t2 mov t3, #32 ' 32 quotient bits :loop cmpsub t1, t2 WC rcl t1, #1 djnz t3, #:loop div32_t1_t2_ret ret
Or would it not work for 32bits to have the dividend and the result in the same long? I can't seem to wrap my mind around it.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
He died at the console of hunger and thirst.
Next day he was buried. Face down, nine edge first.
Post Edited (pullmoll) : 4/6/2010 12:05:49 PM GMT
Comments
http://forums.parallax.com/showthread.php?p=878273
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
For me, the past is not over yet.
Ah, now I see:
Tricky. I'll try that one.
Now that I'm looking at my code, I think I'm doing the wrong thing anyway. I need a timer that is originally based on a 2.4MHz clock and divides it by a value between 1 and 16383 (or perhaps 16384, if 0 is used as the divisor). To simulate that, I wanted to divide the prop clkfreq by the divider and set/toggle the timer's terminal count whenever CNT - t0 was if_ae the result of the division. But a divisor of 1 really means toggle at 2.4MHz, while with my division it would instead toggle once per second. Divisor 2 means 1.2MHz, etc. Now how do I get to the required CNT deltas? *goes to think a bit* Hmm.. I would have to divide clkfreq by (2.400.000 / divider). Right?
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
He died at the console of hunger and thirst.
Next day he was buried. Face down, nine edge first.
Post Edited (pullmoll) : 4/6/2010 12:57:15 PM GMT
the simplest but probably not the fastest way to do a 32 bit divide would be using two separate registers for dividend and quotient:
I use this to calculate speed from distance per time. Don't forget to shift the parameters to the correct bit position, before.
Cheers