Rub*_*ins 5 taocp knuth elixir-mix division
有人可以向我解释MIX中的划分(来自Knuth的TAOCP)是如何在字节到字节的基础上工作的?
rA = |-| . . . .0|
rX = |+|1235|0|3|1|
Run Code Online (Sandbox Code Playgroud)
存储位置1000包含|-|0|0|0|2|0|.
执行操作时
DIV 1000
Run Code Online (Sandbox Code Playgroud)
寄存器变成了
rA = |+|0|617|?|?|
rX = |-|0|0|0|?|1|
Run Code Online (Sandbox Code Playgroud)
现在我明白上的标志rA和rX,但以什么顺序的字节rAX填充和部门完成?
如果DIV 1000导致每一位除以2,那么我会期待
rAX = |+|617|0|1|0|-|0|1|0|1|1|
Run Code Online (Sandbox Code Playgroud)
其中rA包含除法结果和rX余数(从右侧填充).
我可能在这里遗漏了一些东西,而Knuth似乎认为我应该能够自己解决这个问题(因此关于它的10级问题,我也没有得到),但有人可以帮助我吗?
所以我自己想出了办法。
如果您手动进行除法,通过将字节转换为单个数字,您将得到 -210,501,825(如果您使用的是最小类型的字节 - 在 Knuth 的书中为 6 位(!))。将此值除以 -128,即使用相同字节大小的位置 1000 中的值。
商为 1644545,余数为 65,由于两个数均为负数,因此符号为正数。如果您将 1644545 存储在 rA 中,将 65 存储在 rX 中,您将得到
|+|0|6|17|32|01|
|-|0|0|0|1|1|
Run Code Online (Sandbox Code Playgroud)
使用最小字节大小(可容纳 64 个数字)。由于 Knuth 在他的示例中从未假设特定的字节大小,因此 rX 有许多问号。rX 的符号始终是 rA 的前一个符号。
编辑:我使用非常方便的MixEmul实用程序来使用 MIX 的寄存器。这是在 .NET 中完成的一个非常好的 MIX 实现