用于无符号整数的非恢复除法算法

2025年3月17日 | 阅读 3 分钟

非恢复除法使用集合 {-1, 1} 而不是商数位集合 {0, 1}。与恢复除法算法相比,非恢复除法算法更为复杂。但是,当我们在硬件中实现此算法时,它具有一个优势,即每个商位仅包含一个决策和加法/减法。在执行减法运算之后,将没有任何恢复步骤。因此,运算的数量基本上减少了一半。由于运算较少,因此该算法的执行速度将很快。该算法基本上执行简单的运算,例如加法,减法。在这种方法中,我们将使用寄存器A的符号位。0是寄存器A的起始值/位。

Non-Restoring Division Algorithm for Unsigned Integer

现在,我们将学习非恢复除法算法的步骤,这些步骤描述如下

步骤1:在此步骤中,将把相应的值初始化为寄存器,即寄存器A将包含值0,寄存器M将包含除数,寄存器Q将包含被除数,而N用于指定被除数中的位数。

步骤2:在此步骤中,我们将检查A的符号位。

步骤3:如果寄存器A的此位为1,则将AQ的值左移,并执行A = A + M。如果此位为0,则将AQ的值向左移位,并执行A = A - M。这意味着,如果为0,则将M的2的补码加到寄存器A中,并将结果存储到A中。

步骤4:现在,我们将再次检查A的符号位。

步骤5:如果寄存器A的此位为1,则Q [0]将变为0。如果此位为0,则Q [0]将变为1。此处,Q [0]表示Q的最低有效位。

步骤6:之后,N的值将递减。此处,N用作计数器。

步骤7:如果N的值= 0,那么我们将转到下一步。否则,我们必须再次转到步骤2。

步骤8:如果寄存器A的符号位为1,我们将执行A = A + M。

步骤9:这是最后一步。在此步骤中,寄存器A包含余数,而寄存器Q包含商。

例如

在此示例中,我们将借助无符号整数执行非恢复除法算法。


NMAQ操作
400011000001011Begin
0001100001011_左移 AQ
0001111110011_A = A - M
300011111100110Q[0] = 0
0001111100110_左移 AQ
0001111111110_A = A + M
200011111111100Q[0] = 0
0001111111100_左移 AQ
0001100010100_A = A +M
100011000101001Q[0] = 1
0001100101001_左移 AQ
0001100010001_A = A - M
000011000100011Q[0] = 1

因此,寄存器A包含余数2,寄存器Q包含商3。