分工如何在MIX中运作?

时间:2009-04-20 16:08:52

标签: division knuth taocp mix

有人可以向我解释MIX中的划分(来自Knuth的TAOCP)是如何在字节到字节的基础上工作的?

rA = |-| . . . .0| 

rX = |+|1235|0|3|1|

内存位置1000包含|-|0|0|0|2|0|

执行操作时

DIV 1000

寄存器变为

rA = |+|0|617|?|?|

rX = |-|0|0|0|?|1|

现在我理解rArX上的符号,但rAX的字节填充的顺序是什么,以及哪些分区已完成?

如果DIV 1000导致每一位除以2,那么我会期待

rAX = |+|617|0|1|0|-|0|1|0|1|1| 

其中rA包含除法结果,rX包含剩余部分(从右侧填充)。

我可能在这里遗漏了一些东西,而Knuth似乎认为我应该能够自己解决这个问题(因此关于它的10级问题,我也没有得到),但有人可以帮助我?

1 个答案:

答案 0 :(得分:3)

所以我有点想出来了。

如果您手动进行除法,通过将字节转换为单个数字,您将获得-210,501,825(如果您使用的是最小的字节 - 在Knuths书中为6位(!))。除以-128,这是使用相同字节大小的位置1000中的值。

商为1644545,其余为65,符号将为正数,因为两个数字均为负数。如果您将1644545存储在rA中并将65存储在rX中,您将获得

|+|0|6|17|32|01|
|-|0|0|0|1|1|

使用最小的bytesize(包含64个数字)。由于Knuth在他的例子中从不假定特定的字节大小,因此rX有许多问号。 rX的符号始终是rA的先前符号。

编辑:我使用非常方便的MixEmul实用程序来使用MIX的寄存器。这是在.NET中完成的非常好的MIX实现