colorforth /mod 算法是如何工作的?

How does the colorforth /mod algorithm work?

我最近一直在看 Chuck Moore 的 colorForth,我发现了这段代码(以传统语法呈现):

: /mod for begin over over . + -if drop 2* [ swap ] next ; then over or or - 2* - next ;

附有以下解释:

   Divide operation: trial subtract and shift in either 0 or 1

我真的很困惑这是如何实现完整的除法运算的。我意识到 2* 移入 0,- 2* - 移入 1,而 over or or 实现了 nip 操作。我也理解混合循环和 if 组合。

这是我的不足之处。

  1. 似乎期望堆栈上有两个项目,分子和分母,这是有道理的。然而,最初的 for 将 TOS 推入 return 堆栈,只在 return 堆栈上留下一项。然而,over over 操作使用两个值,所以我不确定发生了什么。
  2. 他提到了减法,但没有发生反转,除了 - 2* - 分支,它已经被提到为 1 的移位。
  3. 我不确定如何通过仅移入 1 或 0(移入除数?)来一点一点地构建商。

一些想法:

  1. 也许这取决于 Chuck 正在编程的芯片的特定字长和添加足够次数后的翻转
  2. 可能缺少一个前导码会反转分母,导致在每个循环中都提到减法。

colorForth 和其他 Forth 之间的一些特性:

有关更多信息,来源如下: Description of function and use of colorForth opcodes

仅供参考:关于此问题的 excellent answer 由 Ulrich Hoffmann post编辑于 comp.lang.forth。


请编辑此post使其更详细。