有人可以向我解释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|
现在我理解rA
和rX
上的符号,但rAX
的字节填充的顺序是什么,以及哪些分区已完成?
如果DIV 1000导致每一位除以2,那么我会期待
rAX = |+|617|0|1|0|-|0|1|0|1|1|
其中rA
包含除法结果,rX
包含剩余部分(从右侧填充)。
我可能在这里遗漏了一些东西,而Knuth似乎认为我应该能够自己解决这个问题(因此关于它的10级问题,我也没有得到),但有人可以帮助我?
答案 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实现