MIX中的除法运算是如何工作的?

8

有人能向我解释一下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个回答

5

所以我自己想通了。

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

商是1644545,余数是65,由于两个数字都是负数,符号将是正数。如果你在rA中存储1644545,在rX中存储65,你将得到

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

使用最小的字节数(可以容纳64个数字)。由于Knuth在他的示例中从不假设特定的字节数,因此rX有很多问号。rX的符号始终为rA的先前符号。

编辑:我使用非常方便的MixEmul工具来操纵MIX的寄存器。这是一个相当不错的.NET MIX实现。


谢谢@Ruben Steins。我也有一个关于DIV的问题,但它与这句话有关:“如果V=0或商的大小超过五个字节(**这相当于条件|rA| ≥ |V|**)…”(第131页底部,第3版)。您知道粗体字中的含义吗?如何将条件|rA| ≥ |V|等同于说如果V=0或商的大小超过五个字节? - user51462

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接