How to do division in ARM?

后端 未结 2 1319
一向
一向 2021-01-24 04:55

I m trying to find how to make a division in ARM since there is no DIV command. If that can be done by multiplication of a float number [/9 = *0.09], b

2条回答
  •  长情又很酷
    2021-01-24 05:31

    Michael's answer is right if you divide the number by a constant and you need an integer result. You won't get the fraction part like you want.

    If you need a floating-point result you'll need a floating-point division function, which is not easy to implement in software and asm on architectures without FPU. ARMv7 and above have FPU/SIMD by default, some ARMv6 and below also have FPU so you can divide it directly in hardware

    A fixed-point solution may be easier, just divide the number like normal integer division but remember to adjust the result after calculation. Of course fixed-point number won't have large dynamic range like floating-point but in your case I think the range is enough. You can also multiply the remainder by 10n, with n is the number of digits after decimal sign you need, then divide it with the above divisor again to get the fractional part

    For example to get the result of 22/9 with 3 digits of precision do as follow:

    22/9   = 2 remains 4
    4*10^3 = 4000
    4000/9 = 444
    → 22/9 = 2.444
    

    To get more precision, just multiply the remainder with a larger power of 10

提交回复
热议问题