当我们将两个数相除时,除法算法提供了商和余数。它们一般分为慢速算法和快速算法两种。慢速除法算法是还原,非还原,非性能还原,SRT算法,并且很快出现了Newton-Raphson和Goldschmidt。
在本文中,将为无符号整数执行恢复算法。恢复项是由于以下事实:每次迭代后都会恢复寄存器A的值。
此处,寄存器Q包含商,而寄存器A包含余数。在这里,n位除数被加载到Q中,除数被加载到M中。寄存器的值最初保持为0,这是其值在迭代过程中被恢复的寄存器,因此其被称为恢复。
让我们选择涉及的步骤:
- 步骤1:首先用相应的值初始化寄存器(Q =股息,M =除数,A = 0,n =股息位数)
- 步骤2:然后将寄存器A和Q的内容左移,就好像它们是一个单元一样
- 步骤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的最高有效位的值为1。因为寄存器Q包含商,即3,而寄存器A包含余数2。