有谁知道使用非恢复除法划分无符号二进制整数的步骤?
在网上很难找到任何好的资源。
即如果A = 101110
和B = 010111
我们如何找到A divided by B
不可恢复的除法?每个步骤中的寄存器是什么样的?
谢谢!
(我的回答有点晚了。但我希望它对未来的访客有用)
下图给出了非恢复除法的算法:
在本题中,Dividend (A) = 101110,即 46,Divisor (B) = 010111,即 23。
初始化:
Set Register A = Dividend = 000000
Set Register Q = Dividend = 101110
( So AQ = 000000 101110 , Q0 = LSB of Q = 0 )
Set M = Divisor = 010111, M' = 2's complement of M = 101001
Set Count = 6, since 6 digits operation is being done here.
在此之后,我们开始算法,我在下表中显示:
表中,SHL(AQ) denotes shift left AQ by one position leaving Q0 blank
。
类似地,Q0 位置的方形符号表示,it is to be calculated later
希望表中的所有步骤都清楚!
1) 将寄存器 A 的值设置为 0 (N 位)
2) 将寄存器 M 的值设置为除数 (N 位)
3) 将寄存器 Q 的值设置为被除数 (N 位)
4) 将 A 与 Q {A 连接,Q}
5) 重复以下“N”次(这里 N 是除数中的位数):
如果 A 的符号位等于 0,则将
A 和 Q 组合左移 1 位并
从 A 中减去M,
else 将 A 和 Q 组合左移 1 位并将M 添加到 A
现在如果 A 的符号位等于 0,则将 Q[0] 设置为 1,否则将 Q[0] 设置为 0
6) 最后如果 A 的符号位等于 1 然后将 M 加到 A。
7) 将 A 赋值为余数,将 Q 赋值为商。