【问题标题】:Non-restoring division algorithm非恢复除法算法
【发布时间】:2021-03-13 01:36:28
【问题描述】:

有谁知道使用非恢复除法来除无符号二进制整数的步骤?

在网上很难找到任何好的资源。

即如果A = 101110B = 010111

我们如何在非恢复分区中找到A divided by B?每个步骤中的寄存器是什么样的?

谢谢!

【问题讨论】:

  • @RaymondChen,错误的结果

标签: algorithm binary division bits addition


【解决方案1】:

(我的回答有点晚了。但我希望它对未来的访客有用)

非恢复除法算法如下图:

在这个问题中,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

希望表中的所有步骤都清楚!!!

【讨论】:

  • 提醒一下:如果余数 (A) 为负数,调整余数 (A) 是不够的:将商 (Q) 减一。
【解决方案2】:

1) 将寄存器 A 的值设为 0(N 位)
2) 将寄存器 M 的值设置为除数(N 位)
3) 将寄存器 Q 的值设为 Dividend (N bits)
4) 连接 A 和 Q {A,Q}
5)重复以下“N”次(这里N是除数中的位数):
如果A的符号位等于0,
将 A 和 Q 组合左移 1 位和 从 A 中减去 M,
否则将 A 和 Q 组合左移 1 位并将 M 添加 M 到 A
现在如果 A 的符号位等于 0,则将 Q[0] 设置为 1,否则将 Q[0] 设置为 0
6) 最后,如果 A 的符号位等于 1,则将 M 添加到 A。
7) 指定 A 为余数,Q 为商。

【讨论】:

  • 这似乎只是将Abid Rahman K's answer 的(不完整的)图表用文字表达出来。
  • @greybeard:如果它是准确的(我没有检查),这对使用屏幕阅读器或其他不适用于文本图像的技术的人很有用。
  • (@PeterCordes: [putting into words] useful for [more than one purpose] 去过那里,做到了。不是我的反对票。)
  • @greybeard 请检查它是否准确,与流程图相比,有时分步给出更好的解释
  • (我不明白这一点告诉我:我在其他问题中做了同样的事情(甚至在上面声称如此),我没有投票,我没有看到这个答案因为没用(将鼠标悬停在“否决三角”上)。
猜你喜欢
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
相关资源
最近更新 更多