我特别致力于 Cortex-A8 和 Cortex-A9 的研究。我知道有些架构没有整数除法,但是除了转换为 float 、除法、转换为整数之外,最好的方法是什么?或者这确实是最好的解决方案?
干杯! =)
最佳答案
通过执行 64 位乘法和右移可以快速完成除以常数值,例如,如下所示:
LDR R3, =0xA151C331
UMULL R3, R2, R1, R3
MOV R0, R2,LSR#10
这里 R1 除以 1625。 计算如下:64bitreg(R2:R3) = R1*0xA151C331,那么结果就是高32bit右移10:
R1*0xA151C331/2^(32+10) = R1*0.00061538461545751488 = R1/1624.99999980
您可以根据以下公式计算自己的常数:
x / N == (x*A)/2^(32+n) --> A = 2^(32+n)/N
选择最大的n,其中A < 2^32
关于assembly - 如何在 ARM 上进行整数(有符号或无符号)除法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8348030/