细分模数函数 - 16位但一次只能做8位

时间:2013-11-17 21:56:35

标签: math binary mips modulo

我正在尝试找到两个16位二进制数的模数。我一次只能做8位。有没有办法在多个8位方程中划分16位模运算方程?

如果是的话,

我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果你有一个8位CPU,很可能它本身不能进行除法或模运算(你可能很幸运有一个乘数!),所以试图利用处理器来打破是没有意义的8位操作中的16位操作。 AFAIK,无论如何都无法做到这一点。你需要一点一点地进行除法。 (除法的大多数硬件实现也逐位进行除法,这是不可避免的。它不像可以并行完成的乘法。)。

我认为你需要实现“俄罗斯农民”方法,这里提到其他堆栈溢出文章:Fastest way to calculate a 128-bit integer modulo a 64-bit integer

我在这里贴了答案:

要查找余数,请执行(伪代码):

X = B;

while (X < A/2)
{
    X <<= 1;
}

while (A >= B)
{
    if (A >= X)
        A -= X;
    X >>= 1;
}

模数留在A。