7

我目前正在使用 Logisim(即仅逻辑门)构建一个 16 位 ALU,并且被困在除法过程中。我目前只是使用简单的标准“除法算法循环”(如下图):

  1. 读取输入值;
  2. 比较输入值。等到比较过程完成;
  3. 如果A<B,转步骤10。如果A≥B,转下一步;
  4. 从 A 中减去 B;
  5. 等到减法过程完成;
  6. 加一数;
  7. 等到计数过程完成;
  8. 将减法过程中的值写入输入;
  9. 转到第 1 步;
  10. 答案是计数余数 A

但是,对于具有大答案的进程来说,这需要很长时间(重复 300 滴答周期 65,000 次并不有趣)。我只是想知道是否有可以使用逻辑门实现的更快的类似算法(专门使用加法和/或减法和/或乘法以及任何布尔逻辑)。任何帮助或想法将不胜感激!弗雷泽

4

2 回答 2

4

使用长除法。在二进制中,没有乘法,因为每个位位置的商只能是 1 或 0。所以它可以实现为条件减法(如果结果非负则减法)和移位。

当然,这只是一个粗略的大纲。

于 2013-10-22T21:47:24.010 回答
2

32/16:16+16 除法的典型方法是将被除数存储在一对 16 位寄存器中(在操作期间会更新),除数存储在其自己的寄存器中(不会)。十六次,除数减去被除数的高17位;如果借位结果,丢弃结果并将除数左移一位,将 0 放入 lsb。如果没有借位结果,则将结果存储到除数中,同时将其左移,但将 1 放入 lsb。经过 16 步之后,除数寄存器的低 16 位将保存商,而高 16 位将保存余数。请注意,仅当商可以 16 位表示时,此操作才有效。另请注意,在以这种方式实现 32/16:16+16 除法的处理器上,

于 2013-11-01T18:04:07.757 回答