当我们将两个数相除时,除法算法会提供商和余数。它们一般有两种类型的慢算法和快算法。慢除法算法有恢复、非恢复、非执行恢复、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。