📜  无符号整数的恢复除法算法

📅  最后修改于: 2021-09-16 10:35:35             🧑  作者: Mango

当我们将两个数相除时,除法算法会提供商和余数。它们一般有两种类型的慢算法和快算法。慢除法算法有恢复、非恢复、非执行恢复、SRT 算法,在快速算法下有 Newton-Raphson 和 Goldschmidt。

在本文中,将执行无符号整数的恢复算法。恢复项是由于每次迭代后寄存器 A 的值都会恢复。

这里,寄存器 Q 包含商,寄存器 A 包含余数。这里,n 位被除数加载到 Q 中,除数加载到 M 中。寄存器的值最初保持为 0,这是在迭代期间恢复其值的寄存器,因此它被命名为“恢复”。

让我们选择涉及的步骤:

  • 步骤 1:首先用相应的值初始化寄存器(Q = 股息,M = 除数,A = 0,n = 被除数的位数)
  • Step-2:然后将寄存器 A 和 Q 的内容左移,就好像它们是一个单元一样
  • Step-3:然后从A中减去寄存器M的内容,结果存入A
  • 步骤 4:然后检查 A 的最高有效位是否为 0 Q 的最低有效位设置为 1 否则如果是 1 Q 的最低有效位设置为 0 并恢复寄存器 A 的值即与 M 相减前 A 的值
  • 步骤 5:计数器 n 的值递减
  • 第 6 步:如果 n 的值变为零,我们就进入循环,否则我们从第 2 步开始重复
  • 步骤 7:最后,寄存器 Q 包含商,A 包含余数

例子:

Perform Division Restoring Algorithm 
Dividend = 11
Divisor  = 3
n M A Q Operation
4 00011 00000 1011 initialize
00011 00001 011_ shift left AQ
00011 11110 011_ A=A-M
00011 00001 0110 Q[0]=0 And restore A
3 00011 00010 110_ shift left AQ
00011 11111 110_ A=A-M
00011 00010 1100 Q[0]=0
2 00011 00101 100_ shift left AQ
00011 00010 100_ A=A-M
00011 00010 1001 Q[0]=1
1 00011 00101 001_ shift left AQ
00011 00010 001_ A=A-M
00011 00010 0011 Q[0]=1

记得恢复A的A最高有效位的值是1。因为寄存器Q包含商,即3,寄存器A包含余数2。