问题描述
我最近一直在看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操作。我也了解混合循环以及组合。
这是我不足的地方。
- 似乎期望堆栈上有两个项目,分子和分母,这很有意义。但是,首字母
for
将TOS推入返回堆栈,而在返回堆栈上仅留下一项。over over
操作可以使用两个存在的值,因此我不确定发生了什么。 - 他提到了减法,但是除了
- 2* -
分支(已经提到在1中转移)之外,没有发生反转。 - 我不确定如何仅将1s或0s(除数?)内的值来逐步构造商。
一些想法:
- 也许这取决于Chuck正在编程的芯片的特定字长以及添加足够次数后的翻转
- 也许缺少使该分母剂反转的前导,导致每个循环中都提到了减法。
colorForth和其他Forths之间的某些特质:
-
.
是Chuck芯片上用于计时目的的点子。 -
-
是按位求逆,而不是减法。 -
or
是排他性的,或不是包含性的或
有关其他信息,请参见以下来源: Description of function and use of colorForth opcodes