I'm implementing my own floating point multiplication algorithm using an Arduino Due, which uses the ARM microcontroller. I have 90% of it working. My only problem now is multiplying two significands together.

My instruction is simple:

"umull r5, r6, r4, r4 \n\t"

r4 contains my significand. I have verified this by looking at it alone. r5 & r6 were set to #0 right before this, so I know there is nothing funny happening there. And yes, I set bit #24 of my significand to 1 to account for the hidden 1 in floating point numbers.

My number is 13.56 in base 10. My floating point representation is then:

0 10000010 10110001100001111000011

My significand is then: **1**10110001100001111000011

Multiplying the two using MS calculator in binary mode gives me the following:

10110111 10001010 11101110 11000010 10100110 10001001

Whereas my umull result gives me this:

r6 = 00000000 00000000 11011111 11011111

r5 = 10100100 11111110 10001001 10001001

Obviously quite different. When I square the number using C and print out the binary, it's this:

0 10000110 01101111010010110100101

So if you remove the leading 1 from the calculator result, it lines up... sort of. I get that this depends on the conversion from a decimal to a floating point, but what I don't get is why my umull result is different than what MS calculator came up with.